2013-04-25 9 views
10

Ho cercato relazioni in Laravel 4 nel documentation e sto cercando di capire quanto segue.Laravel Relationships

Ho una tabella nel mio database chiamata "eventi". Questa tabella ha vari campi che contengono principalmente ID che si riferiscono ad altre tabelle. Ad esempio, ho una tabella 'corsi'. La tabella degli eventi contiene un campo chiamato 'course_id' che si riferisce all'ID del campo 'id' nella tabella dei corsi.

Quindi, in sostanza, ho bisogno di alcuni consigli su come procedere per mettere in relazione i due (appartiene a()?) E quindi passare i dati connessi alla vista.

Qui è dove sono fino ad ora http://paste.laravel.com/pf3.

Spero che voi siate in grado di darmi qualche consiglio su come meglio affrontare questo problema. Grazie.

Gaz

risposta

11

Questa è fondamentalmente la stessa risposta di @Marko Aleksić, ma con le relazioni hasOne() e belongsTo() nel modo giusto.

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

È necessario specificare in entrambi i modelli un rapporto. belongsTo() in uno, hasOne() in un altro, dal momento che si sta utilizzando uno-a-uno

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

} 

Poi definendolo nel percorso o il controller sarebbe come segue:

Corso di evento specifico (in questo caso con id 1)

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

evento naturalmente specifica (in questo caso con id 1)

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

Si prega di fare riferimento alla documentazione laravel 4, sezione eloquente ORM: http://laravel.com/docs/eloquent#one-to-one

+0

Ciao, non mi dispiace. Ad un evento verrà associato sempre un solo corso. –

+0

Quindi, invece di hasMany usa belongsTo() con hasOne() –

+1

Una relazione hasOne() corrisponde a 'questo' id 'di un modello' a 'foreignKey' nella tabella correlata. Una relazione belongsTo() corrisponde all'id di una tabella correlata a un campo "localKey" sul modello "this". Un altro modo per pensarci è che la relazione belongsTo() dovrebbe vivere sul modello che ha il campo che si collega all'id della tabella correlata. La relazione hasOne() dovrebbe vivere sul modello che 'è collegato a' da un campo su una tabella correlata. ----- Tutto ciò che viene detto, la risposta di cui sopra sembra essere il modo sbagliato in giro dato l'OP ha detto "tabella degli eventi contiene un campo chiamato 'course_id'" –

0

Modello

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

View

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

lavoro è per me;)