Laravel: belongsTo() Beziehung übernimmt eins-zu-viele-Beziehung anstelle von eins-zu-eins
Bin ich mit einem langwierigen problem mit Laravel ist ORM.
Habe ich ein Modell mit mehreren Beziehungen, so wie hier:
class Pages extends Eloquent {
protected $guarded = array('id','config_id');
public function template()
{
return $this->belongsTo('Templates', 'templates_id');
}
public function updateUser()
{
return $this->belongsTo('Users', 'updated_by');
}
Kann ich jetzt auf die Vorlage zugreifen, verwandten Artikel in einer einfachen Art und Weise, wie diese:
$this->template->name;
Und es funktioniert out-of-the bat, weil Laravel ORM ' s davon ausgegangen, dass es eine eins-zu-eins-Beziehung und ruft intern die ersten () - Methode.
Aber wenn ich versuche, das gleiche mit updateUser es schlägt fehl und ein Fehler ausgegeben, der besagt, dass es nicht mehr als Namen auf einem nicht-Objekt.
Aber wenn ich es versuchen:
$this->updateUser()->first()->name;
es funktioniert, aber es fühlt sich nicht richtig an für mich.
Also meine Frage ist, wie Laravel ORM ' s entscheiden, wenn eine definierte Beziehung mit belongsTo() ist eins-zu-eins-oder eins-zu-viele? Gibt es eine Möglichkeit zu zwingen, brauchte Verhalten?
Dank
- verwenden Sie
hasOne()
um die Beziehung anderswo? und Sie haben, Lesen Sie die Dokumentation? - Ja, ich habe die Dokumentation Lesen. Ich habe nicht hasOne() anderswo, weil ein einzelner Benutzer kann den updater von vielen Seiten, es ist eine eins-zu-viele-Beziehung aus der Sicht der Nutzer, aber eins-zu-eins von einer Seite ein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie brauchen, um die Beziehung zu definieren. Sie definieren können 'verschiedene' Beziehungen auf die Perspektive an.
Den
->belongsTo()
Funktion eine inverse Funktion, aber Sie nicht definiert, alles auf die Benutzer-Tabelle - es ist also zu Unrecht angenommen, die inverse ist eins-zu-viele.Nur fügen Sie diese an Ihre Benutzer Klasse: