@vladimirir

Как задать тип varchar через миграцию в Битрикс?

Пытаюсь создать миграцию для создания hl блока, у некоторых полей тип должен быть varchar(255). Ни в какую не получается его добиться, получается в миграции указать только string, а на выходе получается всегда text.
Есть ли какой-то способ через миграцию задать тип varchar(255)?

Вот пример кода, как у меня таблица с двумя полями создаётся

<?php

namespace Sprint\Migration;

use Adv\AdvApplication\Migration\SprintMigrationBase;
use Bitrix\Main\Application;
use Bitrix\Main\Db\SqlQueryException;
use Throwable;

class AddHLBlockTableExample20210525162658 extends SprintMigrationBase
{
    protected $description = 'Создаёт hl-блок "Пример"';

    protected $moduleVersion = "3.15.1";

    protected const HL_NAME = 'TableExample';

    /**
     * @return bool|void
     *
     * @throws Exceptions\HelperException
     * @throws SqlQueryException
     */
    public function up()
    {
        $helper = $this->getHelperManager();
        $hlBlockId = $helper->Hlblock()->saveHlblock($this->getHlBlockData());

        $this->addFields($hlBlockId, $helper);
    }

    /**
     * @return bool|void
     * @throws Exceptions\HelperException
     */
    public function down()
    {
        $helper = $this->getHelperManager();
        $helper->Hlblock()->deleteHlblockIfExists(self::HL_NAME);
    }

    /**
     * @return array
     */
    protected function getHlBlockData(): array
    {
        return [
            'NAME' => self::HL_NAME,
            'TABLE_NAME' => 'table_example',
            'LANG' => [
                'ru' => [
                    'NAME' => 'Таблица пример',
                ],
                'en' => [
                    'NAME' => 'Table example',
                ]
            ]
        ];
    }

    /**
     * @return array[]
     */
    protected function getHlFieldsList(): array
    {
        return [
            'UF_EXAMPLE1' => [
                'FIELD_NAME' => 'UF_EXAMPLE1',
                'USER_TYPE_ID' => 'string',
                'XML_ID' => 'EXAMPLE1',
                'SORT' => 100,
                'MULTIPLE' => 'N',
                'MANDATORY' => 'N',
                'SHOW_FILTER' => 'I',
                'SHOW_IN_LIST' => 'Y',
                'EDIT_IN_LIST' => 'Y',
                'IS_SEARCHABLE' => 'N',
                'REQUIRED' => 'Y',
                'SETTINGS' => [
                    'SIZE' => 255,
                    'DEFAULT_VALUE' => 0
                ],
                'EDIT_FORM_LABEL' => [
                    'en' => 'Example1',
                    'ru' => 'Пример1'
                ],
                'LIST_COLUMN_LABEL' => [
                    'en' => 'Example1',
                    'ru' => 'Пример1'
                ],
                'LIST_FILTER_LABEL' => [
                    'en' => 'Example1',
                    'ru' => 'Пример1'
                ]
            ],
            'UF_NAME' => [
                'FIELD_NAME' => 'UF_NAME',
                'USER_TYPE_ID' => 'string',
                'XML_ID' => 'NAME',
                'SORT' => 200,
                'MULTIPLE' => 'N',
                'MANDATORY' => 'N',
                'SHOW_FILTER' => 'I',
                'SHOW_IN_LIST' => 'Y',
                'EDIT_IN_LIST' => 'Y',
                'IS_SEARCHABLE' => 'N',
                'REQUIRED' => 'Y',
                'SETTINGS' => [
                    'SIZE' => 255,
                    'DEFAULT_VALUE' => ''
                ],
                'EDIT_FORM_LABEL' => [
                    'en' => 'Name',
                    'ru' => 'Наименование'
                ],
                'LIST_COLUMN_LABEL' => [
                    'en' => 'Name',
                    'ru' => 'Наименование'
                ],
                'LIST_FILTER_LABEL' => [
                    'en' => 'Name',
                    'ru' => 'Наименование'
                ]
            ],
        ];
    }

    /**
     * @param int $hlBlockId
     * @param HelperManager $helper
     *
     * @throws Exceptions\HelperException
     * @throws SqlQueryException
     */
    protected function addFields(int $hlBlockId, HelperManager $helper): void
    {
        $connection = Application::getConnection();
        try {
            $connection->startTransaction();

            foreach ($this->getHlFieldsList() as $fields) {
                $helper->Hlblock()->saveField($hlBlockId, $fields);
            }

            $connection->commitTransaction();
        } catch (Throwable $exception) {
            $connection->rollbackTransaction();
            throw $exception;
        }
    }

}
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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