Допустим, у меня есть переменная $myQuery
, то есть Illuminate\Database\Eloquent\Builder
, построенная из цепочки Локальные и / или динамические области действия . Для него может быть задано что-то вроде Comment::lengthBetween(1000, 50000)->popular()
, что позволит найти длинные популярные комментарии при его выполнении.
Как получить сообщения, комментарии которых соответствуют $myQuery
? Это выглядит как работа для whereHas
:
$posts = Post::whereHas('comments', function (Builder $query) use ($myQuery) {
// Insert code here
})->get();
Вставка $query->lengthBetween(1000, 50000)->popular();
дает правильные результаты для этой конкретной комбинации областей, но $myQuery
- это переменная , которая выиграла 'эти области всегда используются.
Функция union
здесь не работает по нескольким (надеюсь, очевидным) причинам. Также не устанавливается $query = $myQuery
(потому что whereHas
переводится в SQL where exists
, и ему необходимо связать внешний и первичный ключи, что делается в $query
).
Так как я могу связать $query
и $myQuery
?
Примечание:
- Этот код является лишь примером, основанным на Документах Laravel ;мой реальный код похож, но не о постах и комментариях.
- Я не хочу использовать
DB::raw()
, потому что это ужасно.