$rosters = EventRosters::where('event_id', $event_id)
->whereJsonContains('players', $user_id)
->whereNull('deleted_at')
->get();
Вышеупомянутый запрос, похоже, работает только в том случае, если в массиве json-игроков имеется один элемент.
Данные, хранящиеся в базе данных, выглядят следующим образом: [1]
vs ["1","2"]
Есть ли причина, по которой JsonContains работает только тогда, когда видит [1]
в db, но не тогда, когда видит ["1","2"]
?
Я новичок в Laravel и немного борюсь с этим.
Типы данных должны соответствовать:
// [1, 2]
->whereJsonContains('players', 1) // Works.
->whereJsonContains('players', '1') // Doesn't work.
// ["1", "2"]
->whereJsonContains('players', '1') // Works.
->whereJsonContains('players', 1) // Doesn't work.
Документация прямолинейна
$rosters = EventRosters::where('event_id', $event_id)
->whereJsonContains(['players', [1,2]])
//->whereNull('deleted_at') Unless you setup a scope at the model bootup,
//Eloquent won't fetch soft deleted records
->get();
В зависимости от того, что у вас в этом столбце json (if id), замените players
на players->id