[Symfony 4] [Doctrine 2] запросов к полю массива - PullRequest
0 голосов
/ 09 января 2020

У меня простой вопрос, я хочу запросить данные, хранящиеся с doctrine как поле массива (PHP сериализованный объект), используя что-то отличное от 'LIKE %xx%', потому что у меня есть такие данные:

    a:4:{i:0;i:2;i:1;i:4;i:2;i:5;i:3;i:1;}

Что после десериализации дает этот массив: [2,4,5,1] Итак, проблема при использовании 'LIKE' заключается в том, что он смешивается между ключами и значениями, тогда что-то вроде этого: Like '%3%' вернет результат, потому что 3 является ключом последнее значение.

Мне немного странно, что я ничего не нашел в документации doctrine или Symfony!

1 Ответ

0 голосов
/ 09 января 2020

Нет хорошего способа запроса сериализованных данных, если база данных не поддерживает их изначально (например, последние postgres + JSON).

LIKE и аналогичные подходы (REGEXP) могут быть быстрыми исправить и может сработать, если вы точно знаете, что в этой области не может быть никаких других сериализованных данных, но они, по моему опыту, ненадежны: не стоит хлопот.

Если это разовая работа, получите данные в PHP, пусть PHP их анализирует, используйте in_array.

Если вы хотите добавить функцию вообще, чем раньше вы преобразуете сериализованное поле в отдельную таблицу с внешним ключом Счастливее ты будешь в конечном итоге. Использование типа массива doctrine - это то, что вам следует делать, только если вы уверены, что вам не нужно запрашивать это поле.

...