QueryBuilder: поиск значения в столбце, содержащем целые числа через запятую - PullRequest
0 голосов
/ 25 августа 2018

У меня есть столбец tags, содержащий идентификаторы в списке через запятую.Я хочу найти все строки, где заданное значение находится в этом столбце.

Допустим, у меня есть две строки, в которых столбец tags выглядит следующим образом:

Row1: 1,2,3,4
Row2: 2,5,3,12

, и я хочу выполнить поискдля строки, где столбец содержит 1.Я пытаюсь сделать это следующим образом:

$qb = $this->createQueryBuilder('p')
      ->where(':value IN (p.tags))
      ->setParameter('value', 1);

Я ожидаю, что это будет что-то вроде

SELECT p.* FROM mytable AS p WHERE 1 IN (p.tags)

Выполнение этого в MySQL напрямую работает отлично.В Doctrine это не работает:

Error: Expected Literal, got 'p'

Работает наоборот, хотя, но это не то, что мне нужно:

->where("p.tags IN :value")

I 'мы много пытались сделать эту работу, но она просто не будет ... Есть идеи?

1 Ответ

0 голосов
/ 27 августа 2018

Я думаю, вы должны использовать функцию LIKE для каждого сценария, например:

        $q = "1";

        $qb = $this->createQueryBuilder('p')
        ->andWhere(
            $this->expr()->orX(
                $this->expr()->like('p.tags', $this->expr()->literal($q.',%')),  // Start with...
                $this->expr()->like('p.tags', $this->expr()->literal('%,'.$q.',%')), // In the middle...
                $this->expr()->like('p.tags', $this->expr()->literal('%,'.$q)),  // End with...
                ),
        );

См. Результат оператора SQL в этой скрипке

Надеюсь, что эта помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...