Dire che ho un modello Box
che contiene molti widget. I widget possono essere attivi o inattivi (booleano). Il modello Widget
ha una portata di query in grado di filtrare i risultati:Eager caricamento del modello correlato utilizzando lo scope di query
modelli/box.php:
class Box extends Eloquent
{
public function widgets()
{
return $this->hasMany('Widget');
}
}
modelli/widget.php:
class Widget extends Eloquent {
public function box()
{
return $this->belongsTo('Box');
}
public function scopeActive($query)
{
return $query->whereActive(true);
}
}
ambiti di query lo rendono facile da ottenere tutti widget per un dato scatola:
$box_widgets = Box::find($box_id)->widgets()->active()->get();
// returns an Eloquent\Collection containing a filtered array of widgets
ma come posso usare per scopeActive
eliminare questa ansiosa caricamento della funzione condizionale del metodo with
?
$boxes = Box::with(array('widgets', function ($q)
{
$q->active();
}))->get();
Sembra che probabilmente c'è una scorciatoia per l'accesso a portata di un rapporto, qualcosa come Box::with('widgets->active')
o Box::with('widgets.active')
, ma non sono stati in grado di trovarlo.
Praticamente esattamente quello che stavo cercando, grazie! Giusto per chiarire, questi sono metodi del modello Box. Questo fornisce anche i set con nomi diversi, il che è fantastico. – joemaller
Sì, certo che appartengono al modello Box. Avere nomi diversi per le relazioni come te è davvero grandioso, perché puoi rendere il codice dettagliato e facile da usare –