web-dev-qa-db-ja.com

Laravel 5.xのonUpdate / onDeleteで使用可能なアクション

here で述べたように、マイグレーションで関係を作成するときにWord cascadeを使用できます
しかし、外部キーがdeletingまたはupdatingのとき、他のアクションについて何も言わなかったのではないでしょうか

そのようなものがあるかどうかわかりません:

$table->foreign('user_id')
  ->references('id')->on('users')
  ->onDelete('set null');
  //->onDelete('set_null');
  //->onDelete('setNull');

またはonUpdateと同じようにphpMyAdminと同様にno actionについて

enter image description here


ありがとう

12
bobD

phpmyadminで言及されているすべてのオプションをこの方法で実行できます。

$table->...->onDelete('CASCADE');
$table->...->onDelete('SET NULL');
$table->...->onDelete('RESTRICT');

// do not call the onDelete() method if you want the RESTRICT option.

外部キーフィールドをnull可能として設定する必要があります。

$table->...->unsigned()->nullable();
22
Rafael Berro

ソースコードを参照してください:

`vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php` in the function compileForeign()

渡したものをテーブルクエリに追加するだけです。

    if (! is_null($command->onDelete)) {
        $sql .= " on delete {$command->onDelete}";
    }

    if (! is_null($command->onUpdate)) {
        $sql .= " on update {$command->onUpdate}";
    }

したがって、必ず次のいずれかを渡します。 「カスケード」、「アクションなし」、「制限」、または「nullを設定」

注:行う [〜#〜]ない[〜#〜] 次のようなアクションでアンダースコアを使用します "set_null"および "no_action"

2
Jaspal Singh