Искать в колонке Json с Laravel - PullRequest
0 голосов
/ 06 декабря 2018

В моей таблице электронных писем есть столбец с именем To с типом столбца Json.Вот как хранятся значения:

[{"emailAddress": {"name": "Test", "address": "test@example.com"}}, {"emailAddress": {"name": "Test 2", "address": "test2@example.com"}}]

Теперь я хочу получить коллекцию всех писем, отправленных на «test@example.com».Я попытался:

DB::table('emails')->whereJsonContains('to->emailAddress->address', 'test@example.com')->get();

(см. https://laravel.com/docs/5.7/queries#json-where-clauses), но я не получил совпадение. Есть ли лучший способ поиска с использованием Laravel (Eloquent)?

В панели отладкиЯ вижу, что этот запрос "переведен" как:

select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"test@example.com\"'))

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Вы можете использовать условие where с аналогичным условием

DB::table('emails')->where('To','like','%test@example.com%')->get();

В качестве альтернативы, если у вас есть Модель, сопоставленная с именами таблиц электронной почты в качестве электронной почты с использованием Eloquent

Email::where('To','like','%test@example.com%')->get(); 
0 голосов
/ 06 декабря 2018

Оператор стрелки не работает в массивах.Используйте это вместо:

DB::table('emails')
   ->whereJsonContains('to', [['emailAddress' => ['address' => 'test@example.com']]])
   ->get()
0 голосов
/ 06 декабря 2018

Я не использовал столбец json, но, как указано в документации, приведенный ниже код должен работать нормально.

DB::table('emails')
  ->where('to->emailAddresss->address','test@example.com')
  ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...