Laravel гдеJsonСодержит с несколькими значениями - PullRequest
0 голосов
/ 29 апреля 2020

Кто-нибудь что-нибудь делал с whereJsonContains?

У меня это работает с ->where('options->language', 'en'), но когда я пытаюсь ->whereJsonContains('options->languages', ['en', 'de']), это не работает для меня.

Это то, что я пытаюсь

$array = ['150486141', '141301210'];
$accountsAlreadyConnected = auth()->user()->accounts()->whereJsonContains('settings->account_id', $array)->get()

, который выводит

select * from `accounts` where `accounts`.`user_id` = 9 and `accounts`.`user_id` is not null and json_contains(`settings`, '[\"150486141\",\"141301210\"]', '$."account_id"')

Но это не дает мне результатов, которых я ожидаю.

Если я цепью, как это

$accountsAlreadyConnected = auth()->user()->accounts()
    ->whereJsonContains('settings->account_id', '150486141')
    ->orWhereJsonContains('settings->account_id', '141301210')
    ->get());

Тогда это дает мне ожидаемые результаты.

Я использую Laravel 7.2.0 с MySQL 5.7 .25

Заранее спасибо,

Джеймс


РЕДАКТИРОВАТЬ

В конце концов, я сделал это

$accountsAlreadyConnected = auth()->user()->accounts()->where(function($query) use($availableAccounts) {
    foreach($availableAccounts as $item) {
        $query->orWhereJsonContains('settings->account_id',$item['id']);
    }
})->select('settings->account_id as account_id')->get();

1 Ответ

0 голосов
/ 29 апреля 2020

Вы должны использовать как массив.

$array = ['settings->account_id'=>'150486141','settings->account_id'=>'141301210'];

$accountsAlreadyConnected = auth()->user()->accounts()->whereJsonContains($array)->get();

Но ваше условие не соответствует полю ввода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...