Size: a a a

2020 December 04

NM

Nikita Malyshev in Drupal RU
Причём артефакты могут всплыть через пару релизов.
источник

NM

Nikita Malyshev in Drupal RU
Я пару таких ловил от него, охерел чинить. Чур меня его юзать)
источник

AK

Alexey Korepov in Drupal RU
ну это да, но если на локалке правильно обновил (вручную проверить результаты можно ж), то и на остальных так же всё сделает, а если всё сломал - взял рабочую базу с другой площадке и ещё раз-десятьраз повторил, пока не сделает как надо ;). Поэтому как-то проще получается, чем пхп-файлик с костылями городить
источник

NM

Nikita Malyshev in Drupal RU
Alexey Korepov
ну это да, но если на локалке правильно обновил (вручную проверить результаты можно ж), то и на остальных так же всё сделает, а если всё сломал - взял рабочую базу с другой площадке и ещё раз-десятьраз повторил, пока не сделает как надо ;). Поэтому как-то проще получается, чем пхп-файлик с костылями городить
Я говорю, я ловил с ним "бомбы замедленного действия". Всё обновлялось корректно, потом приходили апдейты на те сущности и всё сыпалось потому что предыдущие были накачены некорректно.
источник

NM

Nikita Malyshev in Drupal RU
А предыдущие были как раз от него.
источник

AK

Alexey Korepov in Drupal RU
Меня как-то напрягает что при создании нового поля нужно в двух местах писать одно и тоже, исходя из примера https://www.drupal.org/node/3034742 "Installing a new field storage definition" - в сущности поле написал, потом ещё в hook_update то же самое.
источник

NM

Nikita Malyshev in Drupal RU
Ну это как и со схемами БД. Одно срабатывает при инсталяции, другое обновляет для старых инсталяций
источник

AK

Alexey Korepov in Drupal RU
ну да, а потом в одном файле поправишь, в другом забудешь - и поехали расхождения ;)
источник

NM

Nikita Malyshev in Drupal RU
Где там забыть то можно?
источник

NM

Nikita Malyshev in Drupal RU
В общем. потестить это всё скриптиком дело пары строчек в зависимости от задач
источник

AK

Alexey Korepov in Drupal RU
ну вот у меня в очередном мерже - удаляется штук 10 полей в сущности и добавляется 15 штук. В классе сущности я просто удаляю старые, и добавляю новые, и drush entup всё делает автоматом. А тут мне ещё придётся в hook_update прописать всю эту простыню из 10+15=25 полей. И пока дебажу - если правлю что-то у этих полей (например тот же setInitialValue) в файле класса, то не забывать поправить и в hook_update чтобы расхождений не было
источник

NM

Nikita Malyshev in Drupal RU
> drush entup всё делает автоматом
И не работает default value 😀
источник

AK

Alexey Korepov in Drupal RU
изменение свойств поля - это да, сложная процедура, её лучше руками делать, а уж с полным удалением и добавлением полей - drush entup вполне хорошо справляется
источник

AK

Alexey Korepov in Drupal RU
Nikita Malyshev
> drush entup всё делает автоматом
И не работает default value 😀
ну это не из-за него, судя по дебагу он обращается дальше уже к друпаловским функциям, передавая все данные о поле.
источник

AP

Andrey Postnikov in Drupal RU
Alexey Korepov
ну вот у меня в очередном мерже - удаляется штук 10 полей в сущности и добавляется 15 штук. В классе сущности я просто удаляю старые, и добавляю новые, и drush entup всё делает автоматом. А тут мне ещё придётся в hook_update прописать всю эту простыню из 10+15=25 полей. И пока дебажу - если правлю что-то у этих полей (например тот же setInitialValue) в файле класса, то не забывать поправить и в hook_update чтобы расхождений не было
Ты же сам выбрал делать базовые поля - теперь выгребай стоимость технического долга
источник

AK

Alexey Korepov in Drupal RU
Andrey Postnikov
Ты же сам выбрал делать базовые поля - теперь выгребай стоимость технического долга
зато всё лежит в одной табличке вместо десятка джойнов ;)
источник

AP

Andrey Postnikov in Drupal RU
Я понимаю, поэтому и стоит оно х4 дороже из-за поддержки, как и любой кастом
источник

AK

Alexey Korepov in Drupal RU
Alexey Korepov
А у кого-нибудь работает задание значения по-умолчанию в базовых полях кастомной сущности, чтобы в базе прописывался DEFAULT VALUE тоже?
Делаю вот так (Drupal 8.9.7):
  $fields['import_status'] = BaseFieldDefinition::create('integer')
   ->setLabel('Import status')
   ->setRequired(TRUE)
   ->setDefaultValue(1)
   ->setInitialValue(1)
   ->setSettings([
     'size' => 'tiny',
   ]);

А в базе всё-равно нулл:
`import_status` tinyint(4) DEFAULT NULL
Интересно что в функции https://git.drupalcode.org/project/drupal/-/blob/9.2.x/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php#L188 ожидается параметр $spec['default'] а после ->setInitialValue(123) через дебаггер смотрю что значение приходит в $spec['initial']:

array(6)
 type:"int"
 unsigned:false
 size:"tiny"
 not null:false
 initial:123
 mysql_type:"TINYINT"

Пруфы вот: https://git.drupalcode.org/project/drupal/-/blob/9.2.x/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php#L2123
источник

AK

Alexey Korepov in Drupal RU
Так что чёт непонятно как это вообще может у кого-то работать... Пойду баг на d.org настрочу штоле... :)
источник

AP

Andrey Postnikov in Drupal RU
Alexey Korepov
Так что чёт непонятно как это вообще может у кого-то работать... Пойду баг на d.org настрочу штоле... :)
https://www.drupal.org/node/2877964
Написано, что initial работает только во время создания таблиц
источник