Как реализовать автоматическое приращение в миграции Yii2 с помощью MySQL?
Я создал yii2 (v2.0.6) миграция для простого MySQL (v5.6.21) таблица. Все работает, за исключением того, что я не могу понять, как AUTO_INCREMENT первичный ключ. Проблема в том, что я использую небольшое целое число, а не более стандартный длинный целочисленный тип данных. Вот мой миграционный код:
$this->createTable('{{%status}}', [
'id' => $this->smallInteger(8)->unique(),
//'id' => $this->primaryKey(11),
'description' => $this->string(20),
]);
$this->addPrimaryKey('','status','id');
Я мог бы обойти проблему, используя метод - >primaryKey (), который прокомментирован в строке 3 выше, но затем yii создает длинный целочисленный тип данных и Я пытаюсь избежать этого. Любое понимание проблемы будет высоко оценено.
3 ответов
Если важно иметь этот тип столбца, вы всегда можете изменить его:
$this->createTable('{{%status}}', [
'id' => $this->primaryKey(11),
'description' => $this->string(20),
]);
$this->alterColumn('{{%status}}', 'id', $this->smallInteger(8).' NOT NULL AUTO_INCREMENT');
(Я тестировал это с MySQL - он работает)
однако, как говорит @scaisEdge, обычно это не стоит того.
почему не просто primaryKey?, формат для integer (8), integer (11) или primary key всегда один и тот же, всегда целочисленный
тогда или вам нужен небольшой int (максимум 5 цифр), или вы можете использовать нормальный $this->primaryKey()
, потому что
SMALLINT для хранения 2 байтов (значение -32768 32767), а затем
smallInteger(8)
не последовательны. число 8-это выход не для формата магазина. Если вы хотите 8 цифр, вам нужно по крайней мере
INT 4 байт -2147483648 2147483647 или более
$this->createTable('posts', [
'post_id' => "bigint(20) unsigned NOT NULL AUTO_INCREMENT",
'loc_id' => $this->integer(10)->unsigned()->notNull(),
"PRIMARY KEY (`post_id`,`loc_id`)",
], 'ENGINE=InnoDB DEFAULT CHARSET=utf8');