Doctrine Query Builder / DQL - 如何使用 WHERE column = BINARY 'text' 编写查询

Doctrine Query Builder / DQL - How to write query with WHERE column = BINARY 'text'

我将如何编写如下查询:

SELECT id FROM Records WHERE name = BINARY 'My Record';

使用 Doctrine 查询生成器? '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();

为了支持任何 DQL function not provided by the Doctrine ORM a custom user function 需要使用。

按照 Doctrine 文档的建议安装 DoctrineExtensions 库。

composer require beberlei/doctrineextensions

在 Symfony 原则配置中启用 BINARY 类型扩展。

# config/packages/doctrine.yaml

doctrine:
    orm:
       # ...
       dql:
           string_functions:
               binary: DoctrineExtensions\Query\Mysql\Binary

现在你的 DQL 语句应该支持 r.name = BINARY(:name)


MySQL 的 provided DQL type extensions 的完整列表。

datetime_functions:
    addtime: DoctrineExtensions\Query\Mysql\AddTime
    convert_tz: DoctrineExtensions\Query\Mysql\ConvertTz
    date: DoctrineExtensions\Query\Mysql\Date
    date_format: DoctrineExtensions\Query\Mysql\DateFormat
    dateadd: DoctrineExtensions\Query\Mysql\DateAdd
    datesub: DoctrineExtensions\Query\Mysql\DateSub
    datediff: DoctrineExtensions\Query\Mysql\DateDiff
    day: DoctrineExtensions\Query\Mysql\Day
    dayname: DoctrineExtensions\Query\Mysql\DayName
    dayofweek: DoctrineExtensions\Query\Mysql\DayOfWeek
    dayofyear: DoctrineExtensions\Query\Mysql\DayOfYear
    div: DoctrineExtensions\Query\Mysql\Div
    from_unixtime: DoctrineExtensions\Query\Mysql\FromUnixtime
    hour: DoctrineExtensions\Query\Mysql\Hour
    last_day: DoctrineExtensions\Query\Mysql\LastDay
    makedate: DoctrineExtensions\Query\Mysql\MakeDate
    minute: DoctrineExtensions\Query\Mysql\Minute
    now: DoctrineExtensions\Query\Mysql\Now
    month: DoctrineExtensions\Query\Mysql\Month
    monthname: DoctrineExtensions\Query\Mysql\MonthName
    period_diff: DoctrineExtensions\Query\Mysql\PeriodDiff
    second: DoctrineExtensions\Query\Mysql\Second
    sectotime: DoctrineExtensions\Query\Mysql\SecToTime
    strtodate: DoctrineExtensions\Query\Mysql\StrToDate
    time: DoctrineExtensions\Query\Mysql\Time
    timediff: DoctrineExtensions\Query\Mysql\TimeDiff
    timestampadd: DoctrineExtensions\Query\Mysql\TimestampAdd
    timestampdiff: DoctrineExtensions\Query\Mysql\TimestampDiff
    timetosec: DoctrineExtensions\Query\Mysql\TimeToSec
    truncate: DoctrineExtensions\Query\Mysql\Truncate
    week: DoctrineExtensions\Query\Mysql\Week
    weekday: DoctrineExtensions\Query\Mysql\WeekDay
    weekofyear: DoctrineExtensions\Query\Mysql\WeekOfYear
    year: DoctrineExtensions\Query\Mysql\Year
    yearmonth: DoctrineExtensions\Query\Mysql\YearMonth
    yearweek: DoctrineExtensions\Query\Mysql\YearWeek
    unix_timestamp: DoctrineExtensions\Query\Mysql\UnixTimestamp
    utc_timestamp: DoctrineExtensions\Query\Mysql\UtcTimestamp
    extract: DoctrineExtensions\Query\Mysql\Extract

numeric_functions:
    acos: DoctrineExtensions\Query\Mysql\Acos
    asin: DoctrineExtensions\Query\Mysql\Asin
    atan2: DoctrineExtensions\Query\Mysql\Atan2
    atan: DoctrineExtensions\Query\Mysql\Atan
    bit_count: DoctrineExtensions\Query\Mysql\BitCount
    bit_xor: DoctrineExtensions\Query\Mysql\BitXor
    ceil: DoctrineExtensions\Query\Mysql\Ceil
    cos: DoctrineExtensions\Query\Mysql\Cos
    cot: DoctrineExtensions\Query\Mysql\Cot
    degrees: DoctrineExtensions\Query\Mysql\Degrees
    exp: DoctrineExtensions\Query\Mysql\Exp
    floor: DoctrineExtensions\Query\Mysql\Floor
    json_contains: DoctrineExtensions\Query\Mysql\JsonContains
    json_depth: DoctrineExtensions\Query\Mysql\JsonDepth
    json_length: DoctrineExtensions\Query\Mysql\JsonLength
    log: DoctrineExtensions\Query\Mysql\Log
    log10: DoctrineExtensions\Query\Mysql\Log10
    log2: DoctrineExtensions\Query\Mysql\Log2
    pi: DoctrineExtensions\Query\Mysql\Pi
    power: DoctrineExtensions\Query\Mysql\Power
    quarter: DoctrineExtensions\Query\Mysql\Quarter
    radians: DoctrineExtensions\Query\Mysql\Radians
    rand: DoctrineExtensions\Query\Mysql\Rand
    round: DoctrineExtensions\Query\Mysql\Round
    stddev: DoctrineExtensions\Query\Mysql\StdDev
    sin: DoctrineExtensions\Query\Mysql\Sin
    std: DoctrineExtensions\Query\Mysql\Std
    tan: DoctrineExtensions\Query\Mysql\Tan
    variance: DoctrineExtensions\Query\Mysql\Variance

string_functions:
    aes_decrypt: DoctrineExtensions\Query\Mysql\AesDecrypt
    aes_encrypt: DoctrineExtensions\Query\Mysql\AesEncrypt
    any_value: DoctrineExtensions\Query\Mysql\AnyValue
    ascii: DoctrineExtensions\Query\Mysql\Ascii
    binary: DoctrineExtensions\Query\Mysql\Binary
    cast: DoctrineExtensions\Query\Mysql\Cast
    char_length: DoctrineExtensions\Query\Mysql\CharLength
    collate: DoctrineExtensions\Query\Mysql\Collate
    concat_ws: DoctrineExtensions\Query\Mysql\ConcatWs
    countif: DoctrineExtensions\Query\Mysql\CountIf
    crc32: DoctrineExtensions\Query\Mysql\Crc32
    degrees: DoctrineExtensions\Query\Mysql\Degrees
    field: DoctrineExtensions\Query\Mysql\Field
    find_in_set: DoctrineExtensions\Query\Mysql\FindInSet
    format: DoctrineExtensions\Query\Mysql\Format
    from_base64: DoctrineExtensions\Query\Mysql\FromBase64
    greatest: DoctrineExtensions\Query\Mysql\Greatest
    group_concat: DoctrineExtensions\Query\Mysql\GroupConcat
    hex: DoctrineExtensions\Query\Mysql\Hex
    ifelse: DoctrineExtensions\Query\Mysql\IfElse
    ifnull: DoctrineExtensions\Query\Mysql\IfNull
    inet_aton: DoctrineExtensions\Query\Mysql\InetAton
    inet_ntoa: DoctrineExtensions\Query\Mysql\InetNtoa
    inet6_aton: DoctrineExtensions\Query\Mysql\Inet6Aton
    inet6_ntoa: DoctrineExtensions\Query\Mysql\Inet6Ntoa
    instr: DoctrineExtensions\Query\Mysql\Instr
    is_ipv4: DoctrineExtensions\Query\Mysql\IsIpv4
    is_ipv4_compat: DoctrineExtensions\Query\Mysql\IsIpv4Compat
    is_ipv4_mapped: DoctrineExtensions\Query\Mysql\IsIpv4Mapped
    is_ipv6: DoctrineExtensions\Query\Mysql\IsIpv6
    lag: DoctrineExtensions\Query\Mysql\Lag
    lead: DoctrineExtensions\Query\Mysql\Lead
    least: DoctrineExtensions\Query\Mysql\Least
    lpad: DoctrineExtensions\Query\Mysql\Lpad
    match: DoctrineExtensions\Query\Mysql\MatchAgainst
    md5: DoctrineExtensions\Query\Mysql\Md5
    nullif: DoctrineExtensions\Query\Mysql\NullIf
    over: DoctrineExtensions\Query\Mysql\Over
    radians: DoctrineExtensions\Query\Mysql\Radians
    regexp: DoctrineExtensions\Query\Mysql\Regexp
    replace: DoctrineExtensions\Query\Mysql\Replace
    rpad: DoctrineExtensions\Query\Mysql\Rpad
    sha1: DoctrineExtensions\Query\Mysql\Sha1
    sha2: DoctrineExtensions\Query\Mysql\Sha2
    soundex: DoctrineExtensions\Query\Mysql\Soundex
    str_to_date: DoctrineExtensions\Query\Mysql\StrToDate
    substring_index: DoctrineExtensions\Query\Mysql\SubstringIndex
    unhex: DoctrineExtensions\Query\Mysql\Unhex
    uuid_short: DoctrineExtensions\Query\Mysql\UuidShort