web-dev-qa-db-ja.com

Laravel ::外部キーを更新する最良の方法

この移行ファイルがあります

Schema::create('table_one', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->string('name'); 
    $table->integer('table_two_id')->unsigned(); 
    $table->foreign('table_two_id')->references('id')->on('table_two'); 
    $table->timestamps(); 
});

そして、それを作るために更新したい-> onDelete( 'cascade');

$table->foreign('table_two_id')->references('id')->on('table_two')->onDelete('cascade');

これを行う最良の方法は何ですか?

-> change();のようなものがありますか

ありがとう

15

外部キーをドロップしてから再度追加し、移行を実行します。

public function up()
{
    Schema::table('table_one', function (Blueprint $table) {
        $table->dropForeign(['table_two_id']);

        $table->foreign('table_two_id')
            ->references('id')
            ->on('table_two')
            ->onDelete('cascade');
    });
}
27
Borut Flis

Laravel docs says:

外部キーを削除するには、dropForeignメソッドを使用できます。外部キー制約は、インデックスと同じ命名規則を使用します。そのため、テーブル名と制約内の列を連結し、名前に「_foreign」を接尾辞として付けます。

$table->dropForeign('posts_user_id_foreign'); 

または、ドロップ時に従来の制約名を自動的に使用するarray値を渡すことができます。

$table->dropForeign(['user_id']);

https://laravel.com/docs/5.7/migrations#foreign-key-constraints

0
Ricard