Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте!
Есть таблица с полем 'vehicle_type_id' типа bigint. Требуется превратить его во внешний ключ и связать с другой таблицей.
Правильно ли я понимаю, что мне потребуется создать две миграции.
В первой в методе up я удаляю данное поле, а в методе down создаю.
public function up()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->dropColumn('vehicle_type_id');
});
}
public function down()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->bigInteger('vehicle_type_id')->change();
});
}
Во второй в методе up создаю поле и делаю из него внешний ключ, в методе down удаляю
public function up()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->foreignId('vehicle_type_id')->references('id')->on('vehicle_types');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->foreignId('vehicle_type_id');
});
}
Или есть какой-либо более простой способ, аналогичный SQL
ALTER TABLE public.vehicles
ADD CONSTRAINT vehicles_fk FOREIGN KEY (vehicle_type_id)
REFERENCES public.vehicle_types(id)
Спасибо!
Не в сети
Проблему решил. Удалять поле не надо. Надо к готовому полю применить метод $table->foreign
На выходе получим
public function up()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->foreign('vehicle_type_id')->references('id')->on('vehicle_types');
});
}
public function down()
{
Schema::table('vehicles', function (Blueprint $table) {
$table->dropForeign('vehicles_vehicle_type_id_foreign');
});
}
Не в сети