Qn в более простых терминах: Я ищу в качестве пользователя других пользователей. Все пользователи установили предпочитаемые языки и свободно говорят на них. Мне нужно выбрать пользователей, беглые языки которых соответствуют предпочтительным языкам этого пользователя. Оба языка свободно и предпочитаемые языки являются массивом (текстовые поля в БД, но через JSON cast). Как это сделать? (Кроме того, свободный язык является лишь одним из многих условий в запросе. Поэтому сама структура запроса не может быть изменена сейчас.)
Подробная информация о том, что было опробовано: Я получаю список пользователей в $users
. Одно из условий требует, чтобы я сравнил preferredLanguages
(это массив-> collection1) с fluentLanguages
(это также массив-> collection2). Все значения preferredLanguages
должны присутствовать в fluentLanguage
. Итак, я использую array_diff
и проверяю, получился ли результат null
.
Вопрос в том, как использовать это в предложении where
? Я могу использовать array_diff
, скажем, в условии if, но я не знаю, использовать ли его в предложении where
.
Я перепробовал все, что мог придумать, но пока ничего не работает! Может кто-нибудь помочь, пожалуйста?
$collection1=$preferrences->preferredLanguages;
$collection2='user_details.fluentLanguages';
$diff= array_diff($collection1, $collection1);
$users->where(function (Builder $query) use ($matchPref) {
$query
->where($diff, '[]'); //I need to check if $diff is null/empty. I tried everything I can think of here.
});
Редактировать: Я попробовал что-то еще, как указано Кенни ниже. Я верю, что это может сработать, но пока не решило. Любая помощь приветствуется.
$users->filter(function ($user, $key) use ($preferrences->preferredLanguages)){
return ! array_diff($user['fluentLanguages'], $preferrences->preferredLanguages);
});
Я тоже пробовал где, но не получилось.
$users->where(array_diff('user_details.fluentLanguages', $preferrences->preferredLanguages)->IsEmpty(), true)