Instance the query builder directly from model

2020-05-29 16:17发布

问题:

When I do something like SomeModel::with('user') it returns a Query\Builder instance. How can I get this instance without need call the with() (or similar)?

For instance, I tried it: new SomeModel, but it'll returns obviously the instance of my model, not the query builder (not worked to me). The SomeModel::getQuery not works too, because it returns a Query\Builder not related to my model.

I need it to I setup based on some conditionals. So initially it need be empty, like it:

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

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

$someResults = $someBuilder->get();

回答1:

Use the static query method:

$query = User::query();

Additionally, you can use the when method to chain these conditionals directly onto the query builder itself:

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

This is functionally equivalent to the imperative if clause.