2013-06-01 4 views
10

Okay, ich arbeite durch die Laravel 4-Dokumente, um eine Eins-zu-Viele-Beziehung zwischen zwei Modellen einzurichten. Offensichtlich sollte eine Seite hasMany() verwenden. Aber für die andere Seite, sollte ich hasOne oder earsTo verwenden? Ist es wichtig? Was ist der Unterschied? Warum existieren beide?Klären, wie man eine 1: n-Beziehung in Laravels beredten ORM einrichtet

Ich hatte gedacht, hasOne wäre für Eins-zu-Eins-Beziehungen, und gehörtTo für die eine Seite von Eins-zu-Viele. Aber in der Dokumentation, ein entsprechendes Modell für das Einfügen hier:

http://laravel.com/docs/eloquent#inserting-related-models

sie verwenden save() die nur scheint in hasOne und hasMany Beziehungen anwesend zu sein, nicht in belongsTo. Es sieht aus wie belongsToassociate() für den gleichen Zweck verwendet:

https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php#L188

Vielleicht auf Ich brauche nur einigen allgemeinen Hintergrund, wenn belongsTo vs. hasOne, verwenden und warum belongsToassociate() während hasOne verwendet verwendet save().

EDIT: Ich denke, mein Punkt der Verwirrung, dass (http://laravel.com/docs/eloquent#inserting-related-models) in der Dokumentation war, sie verwendet:

$post->comments()->save($comment); 

wo ich hätte:

$comment->post()->associate($post); 

Gibt es ein Vorteil, ein Weise oder die andere? Oder ist es nur eine Frage dessen, was im Kontext sinnvoll ist?

Antwort

10

Bitte beachten Sie die Laravel Dokumente auf der Eins-zu-viele-Beziehung zwischen den Beiträgen und Kommentare http://laravel.com/docs/eloquent#relationships. (Wenn ein Beitrag viele Kommentare enthält und ein Kommentar zu einem Beitrag gehört).

Die Tabellen für Beiträge und Kommentare werden als

Beiträge Tabelle id folgt | Titel | Körper

Kommentare Tabelle id | Kommentar | post_id

Die Datenbanktabelle, die einen Fremdschlüssel enthält, gehört zu einem Datensatz in der anderen Tabelle, daher müssen Sie im Kommentarmodell angeben, dass Kommentare zu Beiträgen gehören.

Sie haben Recht, dass die hasOne-Beziehung nur für eins-zu-eins-Beziehungen gilt.

Hier ist ein Blogbeitrag mit Laravel 3 Code, der eine Erklärung gibt, wie eloquente Beziehungsmethoden funktionieren.

http://laravel.io/topic/14/how-eloquent-relationship-methods-work

+0

Dies half, weil ich meine Beziehungen rückwärts definiert hatte. Ich hatte den Tisch mit dem Fremdschlüssel als 'hasMany'. –

Verwandte Themen