web-dev-qa-db-fra.com

Instance le générateur de requêtes directement à partir du modèle

Quand je fais quelque chose comme SomeModel::with('user') cela retourne une instance de Query\Builder. Comment puis-je obtenir cette instance sans avoir besoin d'appeler la with() (ou similaire)?

Par exemple, je l'ai essayé: new SomeModel, Mais cela retournera évidemment l'instance de mon modèle, pas le générateur de requêtes (pas travaillé pour moi). Le SomeModel::getQuery Ne fonctionne pas non plus, car il renvoie un Query\Builder Non lié à mon modèle.

J'en ai besoin pour configurer en fonction de certaines conditions. Donc, au départ, il doit être vide, comme ça:

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

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

$someResults = $someBuilder->get();
26
David Rodrigues

Utilisez la méthode statique query:

$query = User::query();

De plus, vous pouvez utiliser la méthode when pour chaîner ces conditions directement sur le générateur de requêtes lui-même:

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

Ceci est fonctionnellement équivalent à la clause impérative if.

56
Joseph Silber