2013-04-25 23 views
10

Szukałem relacji w Laravel 4 w documentation i staram się wypracować następujące.Relacje Laravel

Mam tabelę w mojej bazie danych o nazwie "zdarzenia". Ta tabela zawiera różne pola, które zawierają głównie identyfikatory, które odnoszą się do innych tabel. Na przykład mam tabelę "kursów". Tabela zdarzeń zawiera pole o nazwie "identyfikator_pliku", które odnosi się do identyfikatora pola "identyfikator" w tabeli kursów.

Więc, w zasadzie, jestem po porady, w jaki sposób iść w odniesieniu do dwóch (belongsTo()?), A następnie przekazywanie połączonych danych do widoku.

Oto, gdzie jestem na razie http://paste.laravel.com/pf3.

Mam nadzieję, że możecie mi doradzić, jak najlepiej rozwiązać ten problem. Dzięki.

Gaz

Odpowiedz

11

Jest to w zasadzie ta sama odpowiedź, co @Marko Aleksić, ale ze związkami hasOne() i belongsTo() właściwą drogą.

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

Należy określić w obu modelach związek. belongsTo() w jednym, hasOne() w drugiej, ponieważ używasz jeden-do-jednego związku

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'); 
    } 

} 

Następnie nazywając go w trasie lub kontroler będzie w następujący sposób:

Kursu określonego zdarzenia (w tym przypadku z identyfikatorem 1)

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

przypadku szczególnego przedmiotu (w tym przypadku z ID 1)

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

Proszę zapoznać się z dokumentacją laravel 4, odcinek Eloquent ORM: http://laravel.com/docs/eloquent#one-to-one

+0

Cześć, nie, przepraszam. Wydarzenie będzie miało tylko jeden kurs z nim związany. –

+0

Następnie zamiast wielu użyć useTo() z hasOne() –

+1

Relacja hasOne() dopasowuje "identyfikator" tego modelu do "klucza obcego" w powiązanej tabeli. Relacja belongsTo() dopasowuje "identyfikator" powiązanej tabeli do pola "localKey" w tym modelu. Innym sposobem myślenia o tym jest relacja belongsTo() powinna być zgodna z modelem, który ma pole, które prowadzi do powiązanego identyfikatora tabel. Relacja hasOne() powinna być zgodna z modelem, który jest "połączony z" przez pole w powiązanej tabeli. ----- Wszystko to, co zostało powiedziane, powyższa odpowiedź wydaje się być zła, biorąc pod uwagę PO, że "tablica wydarzeń zawiera pole o nazwie" course_id "" –

0

model

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); 
} 

Zobacz

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

Pracuj dla mnie;)