Побитовая операция и вызовы хранимых функций в Symfony и Doctrine соответственно - PullRequest
0 голосов
/ 01 апреля 2020

Я использую 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'

Возможные решения:

  1. использование простого SQL. Это означает, что я потеряю большинство преимуществ ORM
  2. , написав собственную функцию DQL, которая обрабатывает побитовые операции или мою хранимую функцию. Но это называется довольно сложной задачей.

Есть ли более простой способ решить эту проблему? Есть идеи? Спасибо.

...