2015-11-25 22 views
11

Quando faccio qualcosa come SomeModel::with('user') restituisce un'istanza Query\Builder. Come posso ottenere questa istanza senza necessità di chiamare lo with() (o simile)?Istanza del generatore di query direttamente dal modello

Per esempio, ho provato: new SomeModel, ma sarà ovviamente ritorna l'istanza del mio modello, non il generatore di query (non ha funzionato per me). Lo SomeModel::getQuery non funziona, perché restituisce un valore Query\Builder non correlato al mio modello.

Ne ho bisogno per l'installazione basata su alcuni condizionali. Così inizialmente deve essere vuoto, simile al primo:

$someBuilder = SomeModel::getQueryBuilder(); // eg. 

if(condition()) { 
    $someBuilder->where(...); 
} 

$someResults = $someBuilder->get(); 
+0

Il metodo 'getQuery' _does_ restituisce un builder correlato al modello. –

risposta

25

Utilizzare il query metodo statico:

$query = User::query(); 

Inoltre, è possibile utilizzare il metodo when a catena questi condizionali direttamente sul query builder stesso:

$results = SomeModel::query()->when(condition(), function ($query) { 
    $query->where(...); 
})->get(); 

Questo è funzionalmente equivalente alla clausola imperativa if.