Я использую Doctrine 2.7.1-DEV с Symfony CLI версии v4.13.3. Я недавно начал работать с Symfony. Моя задача перепрограммировать веб-приложение. Таким образом, существует существующая база данных, которую необходимо использовать и которую нельзя изменять.
Один столбец таблицы db содержит информацию о побитовой категории. Допустим, бит 0 = категория1, бит 1 = категория2 и так далее. Каждая запись может принадлежать к 0..n категориям.
При обычном SQL я могу просто использовать
where CATEGORIES & b'0101'
Но попытка сделать это с QueryBuilder приводит к ошибке.
[Syntax Error] line 0, col 105: Error: Expected =, <, <=, <>, >, >=, !=, got '&'
Насколько я понимаю, команда docrtine не считает побитовые операции достаточно важными: «добавление операторов к языку DQL представляет собой большую сложность для очень маленького сценария сценария использования, который не не теряйте много в использовании явных функций. "
Я проверил функции DQL, но ничего подходящего нет. https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/dql-doctrine-query-language.html#functions -операторы-агрегаты
Я безуспешно проверил DoctrineExtensions. https://github.com/beberlei/DoctrineExtensions
Затем я попытался использовать самописную сохраненную функцию match_cateogries
where match_categories(w.categories, :c1)
Но это также приводит к ошибке, потому что только известные (и реализованные) функции кажутся приемлемыми.
[Syntax Error] line 0, col 92: Error: Expected known function, got 'match_cateogries'
Возможные решения:
- использование простого SQL. Это означает, что я потеряю большинство преимуществ ORM
- , написав собственную функцию DQL, которая обрабатывает побитовые операции или мою хранимую функцию. Но это называется довольно сложной задачей.
Есть ли более простой способ решить эту проблему? Есть идеи? Спасибо.