Я не могу уснуть из-за этого, либо мне не хватает чего-то действительно очевидного, либо это невозможно сделать вот так.
У меня есть эта Doctrine штука с построителем запросов:
$this->queryBuilder
->where('entity.id != ' . $id)
->andWhere(
$this->queryBuilder->expr()->andX(
$this->queryBuilder->expr()->in(":validatedValue", ['slug', 'title', 'content'])
)
)
->setParameter('validatedValue', $value);
Теперь он производит что-то вроде этого:
SELECT
p0_.id AS id_0,
p0_.title AS title_1,
p0_.teaser AS teaser_2,
p0_.content AS content_3,
p0_.slug AS slug_4
FROM
posts p0_
WHERE
p0_.id <> 1
AND 'my-string-value-something something' IN('slug', 'title', 'content')
У меня проблема с этой конкретной строкой:
AND 'my-string-value-something something' IN('slug', 'title', 'content')
Я хочу иметь возможность проверять фактические столбцы, поэтому я должен выдать что-то вроде этого:
AND 'my-string-value-something something' IN(slug, title, content)
Как вы заметили, правильная версия, которую я хочу иметь, в ней нет кавычек вокруг имен полей, если это имеет смысл. Если они будут там, это будет рассматриваться просто как строка, а не как фактический столбец в таблице.
Я не могу создать это с помощью этого построителя запросов. Я пробовал всевозможные трюки и вложенные expr()
, но ничего из того, что я пробовал, не работало.
Кто-нибудь вообще знает, как я могу сделать это с помощью строителя? Могу ли я сделать это с помощью компоновщика или для этого нужно просто использовать DQL или простой SQL?