Подтвердить что ты не робот

Запрашивать построитель запросов непосредственно из модели

Когда я делаю что-то вроде SomeModel::with('user'), он возвращает экземпляр Query\Builder. Как я могу получить этот экземпляр без необходимости вызвать with() (или аналогичный)?

Например, я попробовал: new SomeModel, но он явно вернет экземпляр моей модели, а не построитель запросов (не работал на меня). SomeModel::getQuery тоже не работает, потому что он возвращает Query\Builder, не относящийся к моей модели.

Мне нужно настроить его на основе некоторых условных выражений. Поэтому изначально он должен быть пустым, например:

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

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

$someResults = $someBuilder->get();
4b9b3361

Ответ 1

Используйте статический метод query:

$query = User::query();

Кроме того, вы можете использовать метод when, чтобы связать эти условные выражения непосредственно с самим конструктором запросов:

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

Это функционально эквивалентно императивному предложению if.