где Json содержит Laravel 5.6 не работает?

0
$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 и немного борюсь с этим.

Теги:
eloquent
laravel-5.6

2 ответа

1
Лучший ответ

Типы данных должны соответствовать:

// [1, 2]
->whereJsonContains('players', 1)   // Works.
->whereJsonContains('players', '1') // Doesn't work.

// ["1", "2"]
->whereJsonContains('players', '1') // Works.
->whereJsonContains('players', 1)   // Doesn't work.
  • 0
    почему он сохраняет один в БД как [1], но когда есть несколько, он сохраняет как ["1", "2"], вместо того, чтобы сохранить один как ["1"]?
  • 0
    Как ты их спасаешь?
Показать ещё 7 комментариев
0

Документация прямолинейна

https://laravel.com/docs/5.6/queries#json-where-clauses

$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

  • 0
    'Players' содержит [1] или ["1", "2"]. $ user_id - это идентификатор пользователя (т. е. 1). Я просто ищу один идентификатор, который находится в ["1", "2"], но, похоже, он его не находит.
  • 0
    тогда вы, скорее всего, сохраняете их неправильно. Возможно, вы отправляете что-то, и оно читается и хранится в виде строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню