2017-05-11 1 views
0

Ich habe zwei Modelle. Ein "Fahrzeug" und ein "Mieter".Aufruf zu undefinierter Methode Illuminate Database Query Builder :: vehicles()

Sie haben folgende Beziehungen miteinander.

Ein Mieter hat viele Fahrzeuge. Ein Fahrzeug gehört einem einzigen Mieter.

Für Tenant.php:

public function vehicles() 
{ 
    return $this->hasMany('\App\Models\Vehicle'); 
} 

Für Vehicle.php:

public function tenant() 
{ 
    return $this->belongsTo('\App\Models\Tenant'); 
} 

Ausführung dieses:

$this->user = $request->user(); 
    $userTenant = $this->user->tenant(); 
    $vehicle= $userTenant->vehicles()->first(); 

Ergebnisse i n ein Fehler

Call to undefined method Illuminate\Database\Query\Builder::vehicles() 

Zeigen auf dieser Linie:

$vehicle= $userTenant->vehicles()->first(); 

Ich bin nicht so sicher, warum dies geschieht = \

Antwort

1

Ich kann nicht von Ihrem Beitrag sehen, was die Beziehungen mit a User, aber die tenant() (mit Klammern) gibt wahrscheinlich eine BelongsTo oder eine andere Relation Instanz zurück, die $userTenant zugewiesen ist. Versuchen Sie diese Zeile auf eine Version zu ändern, ohne Klammern nach tenant der Mieter Modell Instanz zu erhalten, statt:

$userTenant = $this->user->tenant; 

Update von Kommentaren

, wenn Sie eine Beziehung als Methode aufrufen, z.B.

$myModel->relation()

Sie die entsprechende Relation Klasse erhalten. Wenn es als ein Getter verwendet wird, z.B.

$myModel->relation

es ist im Wesentlichen dasselbe wie

Aufruf

$myModel->relation()->get() für die Beziehungen, die mehrere Modelle zielen, oder rufen

$myModel->relation()->first() für die Beziehungen, die ein einzelnes Modell zielen.

Kasse die Dokumentation für weitere Informationen auf relationship methods vs. dynamic properties

+0

Was meinst du mit „Gehört“ oder andere „Relation“ Instanz zurückzukehren? –

+0

Wenn Sie eine Beziehung als Methode aufrufen, z. '...-> relation()' Sie erhalten die entsprechende Beziehungsklasse. Wenn es als ein Getter verwendet wird, z.B. '...-> relation' ist im Wesentlichen das Gleiche wie das Aufrufen von' ...-> relation() -> get() 'für Relationen, die auf mehrere Modelle abzielen oder' ...-> relation() -> first() 'für Beziehungen, die auf ein einzelnes Modell abzielen. –

+0

Danke für die Erklärung, welchen Teil von Dokumenten sollte ich für "dieses" bestimmte Thema revidieren? Eloquente Beziehungen? –

Verwandte Themen