2013-04-25 7 views
10

Ich habe über Beziehungen in Laravel 4 in der documentation gesucht und ich versuche, das folgende auszuarbeiten.Laravel Relationships

Ich habe eine Tabelle in meiner Datenbank namens "Ereignisse". Diese Tabelle enthält verschiedene Felder, die hauptsächlich IDs enthalten, die sich auf andere Tabellen beziehen. Zum Beispiel habe ich eine "Kurs" -Tabelle. Die Ereignistabelle enthält ein Feld namens 'course_id', das sich auf die ID des Feldes 'id' in der Kurstabelle bezieht.

Also im Grunde, ich bin nach ein paar Tipps, wie Sie gehen über die beiden in Verbindung (belongsTo()?) Und dann die verbundenen Daten an die Ansicht übergeben.

Hier ist, wo ich bin bis jetzt http://paste.laravel.com/pf3.

Ich hoffe, Sie können mir einige Tipps geben, wie Sie dieses Problem am besten angehen. Vielen Dank.

Gaz

Antwort

11

Das ist im Grunde die gleiche Antwort wie @Marko Aleksić, aber mit den Beziehungen hasOne() und andsog()() ist es richtig.

class Course extends Eloquent{ 

    protected $table = 'courses'; 


    public function event() 
    { 
     return $this->hasOne('Event'); // links this->id to events.course_id 
    } 
} 


class Event extends Eloquent { 

    protected $table = 'events'; 

    public function course() 
    { 
     return $this->belongsTo('Course'); // links this->course_id to courses.id 
    } 

} 
8

Sie müssen in beiden Modellen eine Beziehung angeben. belongsTo() in einem, hasOne() in den anderen, da Sie verwenden eine Eins-zu-Eins-Beziehung

class Course extends Eloquent{ 

    protected $table = 'courses'; 


    public function event() 
    { 
     return $this->belongsTo('Event'); 
    } 
} 


class Event extends Eloquent { 

    protected $table = 'events'; 

    public function course() 
    { 
     return $this->hasOne('Course'); 
    } 

} 

Aufruf Dann ist es in der Route oder die Steuerung wäre wie folgt:

Verlauf spezifisches Ereignis (in diesem Fall mit der ID von 1)

$course = Event::find(1)->course; 

Ereignisse des bestimmten Kurses (in diesem Fall mit der ID von 1)

$event = Course::find(1)->event; 

verweisen auf die Laravel 4 Dokumentation, Abschnitt Eloquent ORM: http://laravel.com/docs/eloquent#one-to-one

+0

Hallo, tut mir leid. Eine Veranstaltung wird nur 1 Kurs zugeordnet haben. –

+0

Dann statt hasMany Verwendung von "anglesTo()" mit "hasOne()" –

+1

Eine hasOne() - Beziehung stimmt mit der ID dieses "Modells" mit einem "foreignKey" in der zugehörigen Tabelle überein. Eine angleTo() - Beziehung stimmt mit der 'id' einer verwandten Tabelle mit einem 'localKey'-Feld in diesem' Modell überein. Eine andere Möglichkeit, darüber nachzudenken, ist, dass die Beziehung "goesTo()" in dem Modell enthalten sein sollte, in dem das Feld mit der zugehörigen Tabellen-ID verknüpft ist. Die hasOne() - Beziehung sollte auf dem Modell bestehen, das mit einem Feld in einer verknüpften Tabelle verknüpft ist. ----- All dies gesagt, scheint die obige Antwort falsch zu sein, da das OP sagte: "Die Ereignistabelle enthält ein Feld namens 'course_id'" –

0

Modell

public function events(){ 
     return $this->belongsTo('Events', 'id_events'); 
    } 

-Controller

protected events; 

public _construct(SomeTable $table){ 
    $this->table = $table; 
    $this->events = Events::select('id', 'name')->get()->lists('name', 'id'); 
} 

public create(){ 
    return View::make('someTable.create', compact('someTable'))->with('events', $this->events); 
} 

Ansicht

<td>The Events Name!:</td> 
{{Form::select('id_events', $events)}} 

Arbeit für mich;)