208 похожих чатов

32 ответов

19 просмотров

Он и возвращается только строкой, т.к. это результат запроса, вроде как data_type для того и есть, чтобы привести к нужному типу. Но чет похоже битрикс против.

Антон (code-pilots)
Он и возвращается только строкой, т.к. это результ...

Битрикс хочет, чтобы вы джойнили )) По типу массив: примеры того, как ОРМ предполагает использование типа массив при работе через Query $entity->addField( (new ArrayField($fieldName)) ->configureSerializationPhp(), $fieldName ); ...или $entity->addField( (new ArrayField($fieldName)) ->configureSerializationJson(), $fieldName ); То есть мы читаем из базы строку — либо сериализованный либо обджосоненый массив, но на выходе из fetch-а получаем реально массив.

AlexeyGfi
Битрикс хочет, чтобы вы джойнили )) По типу масси...

Спасибо за разъяснение. Самое интересное, что orm массивы не сериализует без явного указания, а хранит их в поле БД как [1,2,3]. Если сделать update(1, 'field_array' => [1,2,3]), то все начинает работать. А чтобы отличить их от текста он к добавляет кавычки в поле БД "[1,2,3]“

AlexeyGfi
Не только массивам. https://t.me/bitrixfordevelop...

А у меня DateTime выгрузились классами, все норм

Антон (code-pilots)
А у меня DateTime выгрузились классами, все норм

А у меня Date. С DateTime я ж написал, что всё ок ))

AlexeyGfi
А у меня Date. С DateTime я ж написал, что всё ок ...

Точно, не понял сразу что о типе речь раз по русски написано

AlexeyGfi
Битрикс хочет, чтобы вы джойнили )) По типу масси...

Спасибо про массивы пригодилось. А вы ими пользовались? Там на стороне БД создается поле varchar(255), т.е. малопригодное свойство вышло. Я пока после $entity->createDbTable(); Вставил ALTER TABLE $tableName MODIFY $tableName.$fieldName LONGTEXT; Как понимаю правильно будет создать свой ArrayField. Не подскажете как поменять базовый тип данных на стороне MySQL? Я так и не нашел где оно там в ORM вызывается.

Антон (code-pilots)
Спасибо про массивы пригодилось. А вы ими пользова...

Я туда настройки сохраняю (типа color: #554466, type: dyno_egg, status: embrion...) или мульти-привязку, например массив кодов элементов. >>> Как понимаю правильно будет создать свой ArrayField === Меня устраивает то, что в БД строка а из кода я оперирую массивом

AlexeyGfi
Я туда настройки сохраняю (типа color: #554466, ty...

Меня все устраивает, кроме длины в 255 символов :) Как бы вы обошли эту проблему без прямой замены типа поля в БД?

Антон (code-pilots)
Меня все устраивает, кроме длины в 255 символов :)...

...а у вас какие варианты? )) Судя по бекграунду у вас богаче опыт работы напрямую с БД

AlexeyGfi
...а у вас какие варианты? )) Судя по бекграунду ...

Я заменил напрямую. Интересно как это сделать используя ORM битрикса.

Антон (code-pilots)
Я заменил напрямую. Интересно как это сделать испо...

Ага. Вопрос не альтернативы Альтеру а его аналога. Гляньте вот этот метод, может то что нужно

AlexeyGfi
screenshot Ага. Вопрос не альтернативы Альтеру а его аналога....

да я смотрел реализации встроенных типов. Но я так и не нашел где ж он это свойство применяет. А мне в идеале надо вообще от string избавится в пользу longtext

AlexeyGfi
screenshot Ага. Вопрос не альтернативы Альтеру а его аналога....

Если не делали, то я сам поковыряюсь, думал может уже была задача. Удобно серилизовать целиком результаты запросов getList для переноса

Антон (code-pilots)
Если не делали, то я сам поковыряюсь, думал может ...

\Bitrix\Main\DB\MysqlCommonSqlHelper::getColumnTypeByField return 'int'; return 'double'; return 'datetime'; return 'date'; return 'text'; return 'varchar('.max(strlen($values[0]), strlen($values[1])).')'; return 'varchar('.max(array_map('strlen', $field->getValues())).')'; return 'varchar('.($defaultLength > 0? $defaultLength: 255).')';

AlexeyGfi
\Bitrix\Main\DB\MysqlCommonSqlHelper::getColumnTyp...

понял спасибо. Вижу всё тупо захардокодили в varchar. Беда, ну ладно буду патчить БД. А как выделять код в телеграмме?

Антон (code-pilots)
понял спасибо. Вижу всё тупо захардокодили в varch...

Выделяем, правой клавишей мыши / Formatting — там и клавиатурные сокращения

Антон (code-pilots)
понял спасибо. Вижу всё тупо захардокодили в varch...

Я попробовал бы отнаследоваться от СкалярФиелда и переопределить метод.

AlexeyGfi
Я попробовал бы отнаследоваться от СкалярФиелда и ...

я тоже так хотел, но там база у него varchar. Там похоже без шансов судя по этому методу: \Bitrix\Main\DB\MysqlCommonSqlHelper::getColumnTypeByField

Антон (code-pilots)
Спасибо про массивы пригодилось. А вы ими пользова...

я как то просто скопировал класс ArrayField себе в неймспейс, и унаследовал его от TextField. больше ничего не менял, вроде

Roma
я как то просто скопировал класс ArrayField себе в...

Там 65535 вроде крышка, мне иногда мало для здоровых вложенных массивов.

Антон (code-pilots)
Там 65535 вроде крышка, мне иногда мало для здоров...

можно сделать свой db connection и допилить) или обойтись без орм

Roma
можно сделать свой db connection и допилить) или о...

без ORM я обошелся :) Судя по тому что я вижу в исходниках - ORM захардкодили. Вместо того, чтобы дать по ветке else, если тип нестандартный определение своего типа, они хардкодят varchar

Антон (code-pilots)
без ORM я обошелся :) Судя по тому что я вижу в ис...

тебе бы пришлось делать хелперы для каждой субд, которую они поддерживают

Roma
тебе бы пришлось делать хелперы для каждой субд, к...

немного иначе. им пришлось бы дать тебе такую возможность)

Roma
тебе бы пришлось делать хелперы для каждой субд, к...

Я бы в этой функции \Bitrix\Main\DB\MysqlCommonSqlHelper::getColumnTypeByField по последней ветке, когда тип не определен, то добавил бы еще одну ветку elseif (isset($field->customDBType) { // return 'varchar('.($defaultLength > 0? $defaultLength: 255).')'; ...... return $field->customDBType . $field->size ? '(' . $field->size . ')' : ''; }

Антон (code-pilots)
Я бы в этой функции \Bitrix\Main\DB\MysqlCommonSq...

так это хелпер только для mysql. а вот вижу, есть еще для mssql, oracle...

Roma
так это хелпер только для mysql. а вот вижу, есть ...

Я просто для примера показал что не так уж и сложно было сделать поддержку кастомного типа поля

Антон (code-pilots)
Я просто для примера показал что не так уж и сложн...

не так уж сложно "наговнокодить" поддержку. а сделать, что бы потом мы не ругались в паблике ядра - сложнее)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта