Sagen wir, ich habe ein Modell Box
, die viele Widgets enthält. Die Widgets können aktiv oder inaktiv sein (boolean). Das Widget
Modell verfügt über eine Abfragebereich, die Ergebnisse filtern:Eager Laden verwandte Modell mit Abfragebereich
models/box.php:
class Box extends Eloquent
{
public function widgets()
{
return $this->hasMany('Widget');
}
}
models/widget.php:
class Widget extends Eloquent {
public function box()
{
return $this->belongsTo('Box');
}
public function scopeActive($query)
{
return $query->whereActive(true);
}
}
Abfrage Tive es einfach alles zu bekommen Widgets für ein bestimmtes Feld:
$box_widgets = Box::find($box_id)->widgets()->active()->get();
// returns an Eloquent\Collection containing a filtered array of widgets
Aber wie kann ich scopeActive
zu beseitigen diese eifrig laden with
Methode bedingte Funktion?
$boxes = Box::with(array('widgets', function ($q)
{
$q->active();
}))->get();
Es scheint, als gäbe es wohl eine Abkürzung für eine Beziehung des Oszilloskops zugreifen, so etwas wie Box::with('widgets->active')
oder Box::with('widgets.active')
aber ich habe nicht in der Lage gewesen, es zu finden.
So ziemlich genau das, was ich suchte, danke! Nur um dies zu verdeutlichen, sind dies Methoden des Box-Modells. Dies bietet auch die Sets mit unterschiedlichen Namen, was großartig ist. – joemaller
Ja, natürlich gehören sie zum Box-Modell. Verschiedene Namen für die Beziehungen wie Sie haben, ist in der Tat groß, wie Sie den Code ausführlich und einfach zu bedienen machen können –