2015-12-02 14 views
8

Nel mio progetto ho molti modelli eloquente che hanno rapporti desiderosi configurati in classe come questa:Disattiva relazioni desiderosi

protected $with = [ 'countries', 'roles' ]; 

Ma a volte ho bisogno solo vecchio modello normale senza alcuna relazione. Posso in qualche modo fare:

Model::noRelations()->all() 

In realtà non voglio usare il generatore di query né creare un'altra classe solo per poche occasioni.

risposta

17

Se si deve impostare la proprietà $with del modello invece di lasciarlo vuoto, è possibile sostituire manualmente i rapporti che hanno bisogno di essere ansiosi caricato in questo modo:

Model::setEagerLoads([])->get(); 

Link to API for setEagerLoads

+0

funziona come un fascino ! Esattamente quello di cui ho bisogno. –

+0

Come posso implementare questo se si fa riferimento a questo Modello in relazione ad un altro Modello come ModelTwo :: with ('modelOne') -> get(); come evitare il carico impaziente per modelOne allora? – BlackBurn027

6

Oltre alla risposta di Thomas Kim.

Se si estende comunque la classe Eloquent \ Model e spesso è necessario rimuovere le relazioni dal modello, questa soluzione potrebbe soddisfare le proprie esigenze.

  1. Crea ambito della tua classe del modello di default:

    public function scopeNoEagerLoads($query){ 
        return $query->setEagerLoads([]); 
    } 
    
  2. Per qualsiasi ORM, che si estende quella classe si sarà in grado di:

    User::noEagerLoads()->all()