2014-11-07 8 views

Antwort

3

Ich glaube, alles in der doc geschrieben:

ake zur Kenntnis, dass Eloquent den Fremdschlüssel der Beziehung auf dem Modellnamen basiert annimmt. In diesem Fall wird angenommen, dass das Telefonmodell einen Fremdschlüssel user_id verwendet. Wenn Sie diese Konvention überschreiben möchten, können Sie der Methode hasOne ein zweites Argument übergeben. Darüber hinaus können Sie ein drittes Argument an die Methode übergeben, auf die lokale Spalte angeben, die für die Zuordnung verwendet werden soll:

was im Grunde bedeutet, dass ‚local_key‘ ist der Name der Tabellenspalte in Ihrem db, die verantwortlich ist um die zugehörige Entität (Telefon) mit Ihrer aktuellen Entität (Benutzer) abzugleichen.

Wenn Sie sich die db ansehen, bin ich sicher, dass Sie einen Tabellenbenutzer mit einer phone_id-Spalte finden, versuchen Sie es in etwas anderes zu ändern (wie zB "phone") und Ihre eloquente Anfrage wird abstürzen. Dann ändern Sie Ihren Anruf zu return $this->hasOne('Phone', 'user_id', 'phone'); und das könnte wieder funktionieren.

+2

Ich habe nicht verstanden Kannst du mir sagen, welche ist der lokale Schlüssel in diesem Bild http://oi61.tinypic.com/2mewz8x.jpg – apache

+0

Angenommen, '$ this' ist Ihre Film-Entität,' 'genre_id'' sollte Ihr local_key sein. Ich bin mir nicht sicher, was für ein Schema es sein soll, aber ich verstehe hier, dass Sie eine Viele-zu-Eins-Beziehung haben, daher ist der Teil der Dokumentation, auf den Sie sich beziehen, nicht relevant. Bitte denken Sie daran, mysql workbench o.ä. zu verwenden, um ein EER-Diagramm oder ähnliches auszugeben ... –

+0

wenn genre_id der lokale Schlüssel ist, was ist der Fremdschlüssel? – apache

3

local_key ist der Primärschlüssel Ihrer Tabelle. Sie müssen es nur angeben, wenn Ihr Primärschlüssel nicht id aufgerufen wird.