2016-04-26 9 views
1

ich ein Array eines bestimmten Modells haben, aus der Datenbank abgerufen, sagen wir mal:Laravel Beziehungen: das Verhältnis von einer Reihe von Modellen

$entries = Entry::with('area')->get(); 

ich all die ‚Area erhalten möchten 'die mit den Einträgen zusammenhängen.

Ein Eintrag bezieht sich auf einen und nur einen Bereich.

Ich kann durch die $entries Array durchlaufen, die Area für jeden einzelnen von ihnen und speichern Sie es in einem anderen Array, aufpassen, zu vermeiden, Duplikate (ja, ich möchte eine "distinct" der Bereiche).

Gibt es keine bessere Lösung? Selbst alle Bereiche zu nehmen, um sie danach zu bearbeiten (Duplikate zu entfernen) wäre besser (denke ich) als durch das $entries Array zu laufen.

+0

Möchten Sie einen bestimmten Bereich für Einträge als Endergebnis? –

+0

Ja! Da ein Bereich viele Einträge enthalten kann, wird er oft angezeigt. Ich möchte nur wissen, welche Bereiche die Einträge angefordert haben. –

+0

Ein Bereich muss mit einem Eintrag verknüpft sein ?, –

Antwort

1

Sie würden has in Verbindung mit with verwenden möchten.

$entries = Entry::has('area')->with('area')->get(); 

Dies wird nur Entry s zurück, die eine verwandte Area

Ihre Frage ein wenig verwirrend ist hat, es klingt wie Sie Area s erhalten mögen, die Sie Entry s in diesem Fall hätten mit dem Start Area Objekt`.

$areas = Area::has('entries')->get(); 

Und das würde zurückkehren nur die Area s, die mindestens eine Entry haben. Es würde auch nicht eifrig die Einträge laden, wenn Sie diese Daten auch brauchen, können Sie die with() wie im ersten Beispiel verketten.

1

Ein Ansatz könnte sein, erhalten alle Einträge id Bereichen, nach allen Bereichen erhalten:

$ids = Entry::all(['area_id'])->toArray(); 
$areas = Area::whereIn($ids)->distinct()->get();