Doctrine может автоматически сериализовать простые значения массива PHP (см. https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/types.html#array-types).
Пример
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name = "my_table")
*/
class MyTable {
/**
* @var array
*
* @ORM\Column(name = "my_array", type = "json", nullable=true)
*/
private $myArray;
}
Пример в базе данных
| my_array |
|---------------|
|'["FOO","BAR"]'|
Вопрос
Есть ли способ запросить эти значения без какого-либо уродливого регулярного выражения непосредственно с помощью DQL или с помощью построителя запросов?
$queryBuilder
->andWhere(":searchParam IN myTable.myArray")
->setParameter('searchParam', 'FOO');
Боковое примечание: я всегда мог обернуть searchParam и выполнить поиск по ключевому слову LIKE. Однако я ищу альтернативное решение.
Postgresql, у которого есть собственный тип JSON. Но я ограничен в возможностях Doctrine и ее DQL.
Верно, поэтому я не использую Doctrine :) Тем не менее, я считаю, что вы можете использовать необработанный SQL с Doctrine, но я не эксперт в этом.






О какой системе баз данных мы говорим? Например, в PostgreSQL есть Тип JSONB, который можно удобно запросить. Я не знаком с MySQL, но есть еще Тип данных JSON.