Как определить длину для сопоставления пользовательских типов в DBAL? - PullRequest
0 голосов
/ 05 июля 2019

Я определил пользовательское сопоставление следующим образом https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 / cookbook / custom-mapping-types.html , и оно работает, но мне нужно make: entity запрашивает длину для типа так же, как для строки. Что еще более важно, миграция должна учитывать значение длины.

Тип «MyEncrypted», который в MySQL становится varbinary, make: entity делает это нормально, но я не хочу делать «MyEncrypted64», «MyEncrypted1024», «MyEncrypted65535», когда я чувствую, что должен иметь возможность просто укажите длину. Аналогично с доктриной: схема: обновление --force.

Что нужно сделать, чтобы запросить и обработать длину?

Я замечаю, что если у меня есть @ORM \ Column (type = "MyEncrypted", length = 37), то значение '37' попадает в переменную $ fieldDeclaration, но миграция отказывается подтверждать изменения длины в PHP-файле сущности, не претендуя на изменения при выполнении 'make: миграции'. Аналогично с доктриной: схема: обновление --force.

1 Ответ

0 голосов
/ 12 июля 2019

В конце концов потерпел неудачу и просто пошел с несколько неудовлетворительным (но функционирующим) типом longblob, так как Doctrine, похоже, не имеет понятия о типах varbinary переменной длины.

В тестировании longblob кажется примерно на 50% длиннее (0,16 мс против 0,11 мс), чем varbinary при выполнении запроса более 128 тыс. Записей.Это все еще «достаточно быстро», но менее чем желательно по сравнению с реализацией на чистом SQL.

...