Запрос типа массива с массивом php с использованием доктрины - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно запросить тип массива mysql с помощью php-массива с помощью doctrine.

Этот мой столбец базы данных массив типа dc2 и содержит такие значения.

a:1:{i:0;s:3:"4wd";}

А это мой запрос построителя запросов,

$qb = $this->createQueryBuilder('c'); 
$qb->andWhere('c.equipment IN (:equipment)')
   ->setParameter('equipment', array('4wd'));
$qb->getQuery()->getResult();

Но, к сожалению, этот запрос возвращает только нулевой вывод.Было бы здорово, если бы кто-то мог помочь решить эту проблему.

Ответы [ 2 ]

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

Наконец я нашел ответ с REGEXP , но для Symfony 4 вам нужно DoctrineExtensionsBundle

"beberlei/DoctrineExtensions": "0.3.x-dev",

в doctrine.yaml

doctrine:
    orm:
        dql:
            string_functions:
                regexp: DoctrineExtensions\Query\Mysql\Regexp

в репозитории

$equipment = implode("|", array('4wd', 'AbD'));
$qb->andWhere('REGEXP(c.equipment, :regexp) = true')
                    ->setParameter('regexp', $equipment);

Эти две темы были действительно полезны для ответа и фона. MySQL LIKE IN ()? И Regex with Doctrine 2 построитель запросов?

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

Чтобы иметь представление о типе DC2, он НЕ существует в SQL.DC2 - это комментарий, добавленный доктриной, чтобы указать, что это значение text , содержащее массив.

Итак, вы должны сначала выбрать столбец и извлечь его.Doctrine собирается обработать его и впоследствии даст вам массив, так что вы можете делать с ним все, что захотите.

Вы могли бы возможно искать в текстовом поле с помощью LIKE и фильтруйте, но это плохая практика, создайте сущность Equipment и добавьте отношение ManyToMany между Equipment и вашей сущностью.Где пункт с отношением ManyToMany хорошо объяснил здесь .

...