Как Symfony 4 генерирует имена ключей при миграции?

У меня есть, например:

CREATE TABLE news
(...)
INDEX IDX_1DD399507E3C61F9 (owner_id)

А также:

ALTER TABLE news 
(...)
ADD CONSTRAINT FK_1DD399507E3C61F9 FOREIGN KEY (owner_id) REFERENCES user (id)

Я имею в виду, как генерируются имена: IDX_1DD399507E3C61F9 и FK_1DD399507E3C61F9?

Я хочу добавить больше вручную, и я хотел бы сохранить ту же стратегию.

Это случайно или параметризовано?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляните, например, на этот файл в методе addIndex(). Он отвечает за создание вашего индекса IDX_1DD399507E3C61F9.

Подробнее см. в исходном коде на репозиторий github.

$indexName = $this->_generateIdentifierName(
    array_merge([$this->getName()], $columnNames),
    'idx',
    $this->_getMaxIdentifierLength()
);

Этот фрагмент вызывает метод _generateIdentifierName() родительского класса AbstractAsset, от которого вы также можете наследоваться.

protected function _generateIdentifierName($columnNames, $prefix = '', $maxSize = 30)
{
    $hash = implode('', array_map(static function ($column) {
        return dechex(crc32($column));
    }, $columnNames));

    return strtoupper(substr($prefix . '_' . $hash, 0, $maxSize));
}

Другие вопросы по теме