Как использовать один и тот же красноречивый запрос дважды, но с одним предложением where?

У меня есть этот запрос:

User::leftJoin('friends', function ($join) {
$join->on('friends.user_id_1', '=', 'users.id')
->orOn('friends.user_id_2', '=', 'users.id');
})
->where(function ($query) use ($myID) {
// Group orwhere functions so the query builder knows these belong together
$query->where([
'friends.user_id_1' => $myID,
'friends.accepted' => true
])
->orWhere([
'friends.user_id_2' => $myID,
'friends.accepted' => true
]);
})
->where('users.id', '!=', $myID) // Exclude the user with id $myID
->get();

https://stackoverflow.com/a/41832867/5437864

Я хочу использовать этот запрос дважды, но с другим предложением where. Можно ли повторно использовать этот запрос, не копируя весь код? И если да, то как?

0

Решение

$query = User::leftJoin('friends', function ($join) {
$join->on('friends.user_id_1', '=', 'users.id')
->orOn('friends.user_id_2', '=', 'users.id');
})
->where(function ($query) use ($myID) {
// Group orwhere functions so the query builder knows these belong together
$query->where([
'friends.user_id_1' => $myID,
'friends.accepted' => true
])
->orWhere([
'friends.user_id_2' => $myID,
'friends.accepted' => true
]);
});

Добавление дополнительных где к существующему запросу

$query->where('users.id', '!=', $myID)$query->get();

Проверьте эту ссылку для другого примера

пример

0

Другие решения

Я использовал клон PHP keyword, Я не уверен, что это лучшее решение, но оно помогает. Любые другие предложения приветствуются.

$friends_query = User::leftJoin('friends', function ($join) {
$join->on('friends.user_id_1', '=', 'users.id')
->orOn('friends.user_id_2', '=', 'users.id');
})
->where(function ($query) use ($myID) {
// Group orwhere functions so the query builder knows these belong together
$query->where([
'friends.user_id_1' => $myID,
'friends.accepted' => true
])
->orWhere([
'friends.user_id_2' => $myID,
'friends.accepted' => true
]);
});

$friends_me = clone $friends_query;
$friends_me = $friends_me->where('users.id', '!=', $myID);

$friends_others = clone $friends_query;
$friends_others = $friends_others->where('users.id', '=', $myID);
0

По вопросам рекламы [email protected]