#php #symfony #doctrine #dql #doctrine-query
Вопрос:
Как бы я написал запрос, такой как:
SELECT id FROM Records WHERE name = BINARY 'My Record';
Использование Doctrine Query Builder? 'My Record'
может быть любое произвольное имя для запроса.
Следующее не работает… Честно говоря, я не ожидал, что это сработает, но я не могу придумать ничего другого, чтобы попробовать.
// Assume $repo is the Records repository
// Assume $name is the name to query, such as "My Record"
$repo->createQueryBuilder('r')
->select('r.id')
->where('r.name = BINARY :name')
->setParameter('name', $name)
->getQuery()
->getResult();
Комментарии:
1. Насколько я понимаю, если поле правильно сопоставлено с этим типом, Doctrine должна обрабатывать все, что требуется для преобразования данных при установке параметра. Работает ли это, если вы просто опускаете
BINARY
своеwhere
предложение?2. Было бы хорошо показать соответствующие части объекта (отображение полей, средство получения и установки)
3. @ArleighHix Я думаю, вы неправильно поняли мой вопрос. Речь идет не о преобразовании данных или о чем-то подобном. Мой вопрос заключается в том, как выполнить этот конкретный SQL-запрос с помощью Doctrine query builder.
4. Нет, Doctrine должна создать соответствующий запрос для настроенной базы данных на основе сопоставления полей, которое вы не показываете.
5. Если это двоичный тип данных в базе данных, то он преобразует строковый параметр php в двоичное значение в запросе.
Ответ №1:
Для поддержки любой функции DQL, не предусмотренной Doctrine ORM, необходимо использовать пользовательскую пользовательскую функцию.
Установите библиотеку DoctrineExtensions, как предложено в документации Doctrine.
composer require beberlei/doctrineextensions
Включите расширение BINARY
типа в конфигурации Symfony doctrine.
# config/packages/doctrine.yaml
doctrine:
orm:
# ...
dql:
string_functions:
binary: DoctrineExtensionsQueryMysqlBinary
Теперь ваши операторы DQL должны поддерживать r.name = BINARY(:name)
Полный список предоставляемых расширений типа DQL для MySQL.
datetime_functions:
addtime: DoctrineExtensionsQueryMysqlAddTime
convert_tz: DoctrineExtensionsQueryMysqlConvertTz
date: DoctrineExtensionsQueryMysqlDate
date_format: DoctrineExtensionsQueryMysqlDateFormat
dateadd: DoctrineExtensionsQueryMysqlDateAdd
datesub: DoctrineExtensionsQueryMysqlDateSub
datediff: DoctrineExtensionsQueryMysqlDateDiff
day: DoctrineExtensionsQueryMysqlDay
dayname: DoctrineExtensionsQueryMysqlDayName
dayofweek: DoctrineExtensionsQueryMysqlDayOfWeek
dayofyear: DoctrineExtensionsQueryMysqlDayOfYear
div: DoctrineExtensionsQueryMysqlDiv
from_unixtime: DoctrineExtensionsQueryMysqlFromUnixtime
hour: DoctrineExtensionsQueryMysqlHour
last_day: DoctrineExtensionsQueryMysqlLastDay
makedate: DoctrineExtensionsQueryMysqlMakeDate
minute: DoctrineExtensionsQueryMysqlMinute
now: DoctrineExtensionsQueryMysqlNow
month: DoctrineExtensionsQueryMysqlMonth
monthname: DoctrineExtensionsQueryMysqlMonthName
period_diff: DoctrineExtensionsQueryMysqlPeriodDiff
second: DoctrineExtensionsQueryMysqlSecond
sectotime: DoctrineExtensionsQueryMysqlSecToTime
strtodate: DoctrineExtensionsQueryMysqlStrToDate
time: DoctrineExtensionsQueryMysqlTime
timediff: DoctrineExtensionsQueryMysqlTimeDiff
timestampadd: DoctrineExtensionsQueryMysqlTimestampAdd
timestampdiff: DoctrineExtensionsQueryMysqlTimestampDiff
timetosec: DoctrineExtensionsQueryMysqlTimeToSec
truncate: DoctrineExtensionsQueryMysqlTruncate
week: DoctrineExtensionsQueryMysqlWeek
weekday: DoctrineExtensionsQueryMysqlWeekDay
weekofyear: DoctrineExtensionsQueryMysqlWeekOfYear
year: DoctrineExtensionsQueryMysqlYear
yearmonth: DoctrineExtensionsQueryMysqlYearMonth
yearweek: DoctrineExtensionsQueryMysqlYearWeek
unix_timestamp: DoctrineExtensionsQueryMysqlUnixTimestamp
utc_timestamp: DoctrineExtensionsQueryMysqlUtcTimestamp
extract: DoctrineExtensionsQueryMysqlExtract
numeric_functions:
acos: DoctrineExtensionsQueryMysqlAcos
asin: DoctrineExtensionsQueryMysqlAsin
atan2: DoctrineExtensionsQueryMysqlAtan2
atan: DoctrineExtensionsQueryMysqlAtan
bit_count: DoctrineExtensionsQueryMysqlBitCount
bit_xor: DoctrineExtensionsQueryMysqlBitXor
ceil: DoctrineExtensionsQueryMysqlCeil
cos: DoctrineExtensionsQueryMysqlCos
cot: DoctrineExtensionsQueryMysqlCot
degrees: DoctrineExtensionsQueryMysqlDegrees
exp: DoctrineExtensionsQueryMysqlExp
floor: DoctrineExtensionsQueryMysqlFloor
json_contains: DoctrineExtensionsQueryMysqlJsonContains
json_depth: DoctrineExtensionsQueryMysqlJsonDepth
json_length: DoctrineExtensionsQueryMysqlJsonLength
log: DoctrineExtensionsQueryMysqlLog
log10: DoctrineExtensionsQueryMysqlLog10
log2: DoctrineExtensionsQueryMysqlLog2
pi: DoctrineExtensionsQueryMysqlPi
power: DoctrineExtensionsQueryMysqlPower
quarter: DoctrineExtensionsQueryMysqlQuarter
radians: DoctrineExtensionsQueryMysqlRadians
rand: DoctrineExtensionsQueryMysqlRand
round: DoctrineExtensionsQueryMysqlRound
stddev: DoctrineExtensionsQueryMysqlStdDev
sin: DoctrineExtensionsQueryMysqlSin
std: DoctrineExtensionsQueryMysqlStd
tan: DoctrineExtensionsQueryMysqlTan
variance: DoctrineExtensionsQueryMysqlVariance
string_functions:
aes_decrypt: DoctrineExtensionsQueryMysqlAesDecrypt
aes_encrypt: DoctrineExtensionsQueryMysqlAesEncrypt
any_value: DoctrineExtensionsQueryMysqlAnyValue
ascii: DoctrineExtensionsQueryMysqlAscii
binary: DoctrineExtensionsQueryMysqlBinary
cast: DoctrineExtensionsQueryMysqlCast
char_length: DoctrineExtensionsQueryMysqlCharLength
collate: DoctrineExtensionsQueryMysqlCollate
concat_ws: DoctrineExtensionsQueryMysqlConcatWs
countif: DoctrineExtensionsQueryMysqlCountIf
crc32: DoctrineExtensionsQueryMysqlCrc32
degrees: DoctrineExtensionsQueryMysqlDegrees
field: DoctrineExtensionsQueryMysqlField
find_in_set: DoctrineExtensionsQueryMysqlFindInSet
format: DoctrineExtensionsQueryMysqlFormat
from_base64: DoctrineExtensionsQueryMysqlFromBase64
greatest: DoctrineExtensionsQueryMysqlGreatest
group_concat: DoctrineExtensionsQueryMysqlGroupConcat
hex: DoctrineExtensionsQueryMysqlHex
ifelse: DoctrineExtensionsQueryMysqlIfElse
ifnull: DoctrineExtensionsQueryMysqlIfNull
inet_aton: DoctrineExtensionsQueryMysqlInetAton
inet_ntoa: DoctrineExtensionsQueryMysqlInetNtoa
inet6_aton: DoctrineExtensionsQueryMysqlInet6Aton
inet6_ntoa: DoctrineExtensionsQueryMysqlInet6Ntoa
instr: DoctrineExtensionsQueryMysqlInstr
is_ipv4: DoctrineExtensionsQueryMysqlIsIpv4
is_ipv4_compat: DoctrineExtensionsQueryMysqlIsIpv4Compat
is_ipv4_mapped: DoctrineExtensionsQueryMysqlIsIpv4Mapped
is_ipv6: DoctrineExtensionsQueryMysqlIsIpv6
lag: DoctrineExtensionsQueryMysqlLag
lead: DoctrineExtensionsQueryMysqlLead
least: DoctrineExtensionsQueryMysqlLeast
lpad: DoctrineExtensionsQueryMysqlLpad
match: DoctrineExtensionsQueryMysqlMatchAgainst
md5: DoctrineExtensionsQueryMysqlMd5
nullif: DoctrineExtensionsQueryMysqlNullIf
over: DoctrineExtensionsQueryMysqlOver
radians: DoctrineExtensionsQueryMysqlRadians
regexp: DoctrineExtensionsQueryMysqlRegexp
replace: DoctrineExtensionsQueryMysqlReplace
rpad: DoctrineExtensionsQueryMysqlRpad
sha1: DoctrineExtensionsQueryMysqlSha1
sha2: DoctrineExtensionsQueryMysqlSha2
soundex: DoctrineExtensionsQueryMysqlSoundex
str_to_date: DoctrineExtensionsQueryMysqlStrToDate
substring_index: DoctrineExtensionsQueryMysqlSubstringIndex
unhex: DoctrineExtensionsQueryMysqlUnhex
uuid_short: DoctrineExtensionsQueryMysqlUuidShort