2013-04-25 27 views
10

Laravel 4'teki documentation numaralı telefondaki ilişkilere bakıyorum ve aşağıdakileri yapmaya çalışıyorum.Laravel İlişkiler

Veritabanımda 'olaylar' adı verilen bir tablom var. Bu tabloda, esas olarak diğer tablolarla ilgili kimlikler içeren çeşitli alanlar bulunmaktadır. Örneğin, bir 'kurslar' tablom var. Etkinlikler tablosu, kurs tablosundaki 'id' alanının kimliğine ilişkin 'course_id' adında bir alan içerir.

Temel olarak, ikisini (belongsTo()?) Ilişkilendirmeye ve ardından bağlı verileri görünüme aktarmaya dair bazı tavsiyelerin peşindeyim.

Şu ana kadar buradayım http://paste.laravel.com/pf3.

Umarim sizlere bu soruna en iyi nasil yaklasacaginiz hakkinda tavsiyede bulunabilirsiniz. Teşekkürler.

Gaz

cevap

11

Bu, temel olarak, @Marko Aleksić ile aynı cevaptır, ancak hasOne() ve belongsTo() ilişkileriyle doğru şekilde.

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

Bir ilişki her iki modelde de belirtmek gerekir. birinde belongsTo(), diğerinde hasOne(), kullandığınız beri bire bir ilişki

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

} 

Sonra rotada onu arayarak veya aşağıdaki şekilde kontrolör olacaktır: ait

Course (1 kimliği ile bu durumda) belirli elbette

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

olay (1 kimliği ile bu durumda) belirli etkinlik

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

laravel 4 belgelerine bakın, bölüm Etkili ORM: http://laravel.com/docs/eloquent#one-to-one

+0

Merhaba, üzgünüm. Bir etkinlik sadece onunla ilişkili 1 kursa sahip olacak. –

+0

Daha sonra, hasMany kullanımı yerine hasongs() withOne() –

+1

A ile bir hasOne() ilişkisi, ilgili tabloda "bu" modelin 'id' değerine 'foreignKey' ile eşleşir. A belongsTo() ilişkisi, 'bu' modelindeki ilgili bir 'id' ile bir 'localKey' alanına eşleşir. Bunu düşünmenin başka bir yolu, ilişkili tablo kimliğine bağlanan alana sahip olan modelde belongsTo() ilişkisinin bulunması gerekir. HasOne() ilişkisi, ilgili tablodaki bir alana 'bağlı' olan modelde yaşamalıdır. ----- Bütün bunlar söylenirse, yukarıdaki cevap OP'nin söylediği gibi yanlış bir şey gibi görünüyor "olaylar tablosu 'course_id' adında bir alan içeriyor" –

0

Modeli

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

Kontrolör

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

Görünüm

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

Çalışma benim için;)