Запрашивать построитель запросов непосредственно из модели
Когда я делаю что-то вроде SomeModel::with('user')
, он возвращает экземпляр Query\Builder
. Как я могу получить этот экземпляр без необходимости вызвать with()
(или аналогичный)?
Например, я попробовал: new SomeModel
, но он явно вернет экземпляр моей модели, а не построитель запросов (не работал на меня). SomeModel::getQuery
тоже не работает, потому что он возвращает Query\Builder
, не относящийся к моей модели.
Мне нужно настроить его на основе некоторых условных выражений. Поэтому изначально он должен быть пустым, например:
$someBuilder = SomeModel::getQueryBuilder(); // eg.
if(condition()) {
$someBuilder->where(...);
}
$someResults = $someBuilder->get();
Ответы
Ответ 1
Используйте статический метод query
:
$query = User::query();
Кроме того, вы можете использовать метод when
, чтобы связать эти условные выражения непосредственно с самим конструктором запросов:
$results = SomeModel::query()->when(condition(), function ($query) {
$query->where(...);
})->get();
Это функционально эквивалентно императивному предложению if
.