Как установить автоматическое приращение в непервичный ключ?
Как бы я установил поле автоинкремента базы данных, которое не является первичным ключом в методе создания?
Единственный способ-это использование необработанного запроса?
DB::statement('ALTER TABLE table CHANGE field field INT(10)AUTO_INCREMENT');
3 ответа:
Это не реализовано, чтобы сделать это. Однако я нашел это на форумах Laravel :
Schema::table('table', function(Blueprint $t) { // Add the Auto-Increment column $t->increments("some_column"); // Remove the primary key $t->dropPrimary("table_some_column_primary"); // Set the actual primary key $t->primary(array("id")); });
Это не тестируется, но должно работать. Я не уверен в том, как Laravel называет свои первичные ключи, возможно, вам нужно сначала проверить это и адаптировать строку
dropPrimary()
, чтобы заставить ее работать.
Текущий ответ не работает, автоматически увеличивающиеся столбцы должны быть первичными ключами. Я рекомендую использовать
firstOrCreate
при вставке, чтобы получить тот же уровень уникальности (при условии, что вы все еще хотите, чтобы был доступен автоматически увеличивающийся ключ).
Я не чувствую себя в безопасности, делая некоторые обходные пути при миграции, поэтому я сделал это внутри файла модели:
/** * Setup model event hooks */ public static function boot() { parent::boot(); self::creating(function ($model) { $model->field_here = $model->count() + 1; }); }
Если вы хотите отключить автоинкрементирование, добавьте это в начало файла модели:
public $incrementing = FALSE;