Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 29.07.2021 18:28:20

Назначить колонке таблицы внешний ключ в миграции

Здравствуйте!

Есть таблица с полем '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)

Спасибо!

Не в сети

#2 30.07.2021 08:22:52

Re: Назначить колонке таблицы внешний ключ в миграции

Проблему решил. Удалять поле не надо. Надо к готовому полю применить метод $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');
        });
    }

Не в сети

Подвал раздела