0

Ich verbrachte jetzt Stunden googeln und experimentieren auf den Versuch, eine Beziehung mit zwei Zwischentabellen arbeiten zu bekommen. Meine Datenbank wie folgt aussieht: (apt_id in Echt apartment_id, war kürzer zu schreiben) Database drawingLaravel 5.5 - Deep Relations von ->

Ich habe jede Beziehung ein Setup richtig mit belongsTo entfernt und und hasMany: Beispiel aus House.php

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

public function apartments() 
{ 
    return $this->hasMany('App\Apartment'); 
} 

gibt es nicht eine Möglichkeit, diese Beziehungen für den Zugriff auf wie:

$house->apartments->tenants->entries 

in Blade:

@foreach ($house->apartments->tenants->entries as $entry) 

, da ich alle Haus Einträge auf house.show (Blade-View) ist es funktioniert

Der einzige Weg angezeigt werden soll durch ein Bündel von foreach innerhalb der jeweils anderen mit ... :/und sie definieren die Reihenfolge ...

Mit meiner gewünschten Beziehung Berufung erzeugt:

Property [tenants] does not exist on this collection instance. 

auf der Seite angezeigt.

Grüße, Pat

Antwort

1

ich Sie erreichen nicht denken können, was Sie wollen den Code verwenden Sie auf dem Laufenden, denn wenn Sie anrufen, zum Beispiel $house->apartments es gibt eine Collection-Objekt. Es handelt sich also nicht mehr um eine Datenbank, deshalb müssten Sie eine Reihe von @foreach s verwenden.

Ich weiß nicht, ob dies der beste Weg, dies zu lösen, oder wenn es Sie in Ihrem aktuellen Problem helfen, aber man konnte dieses Problem denken zurück und versuchen, etwas wie folgt aus:

$entries = \App\Entry::whereHas('tenants', function($q) use ($house) { 
      $q->whereHas('apartments', function($q1) use ($house) { 
       $q1->where('apartments.house_id', $house->id); 
      }); 
     })->get(); 

Und in der Ansicht:

@foreach ($entries as $entry) 
    {{ $entry->tenant->apartment->house->name }} 
@endforeach