Comme mentionné dans ici , nous pouvons utiliser le mot cascade
lors d'une relation dans les migrations
mais je me demande s'ils n'ont rien dit sur les autres actions lorsque deleting
ou updating
une clé étrangère
donc je ne sais pas s'il y a une telle chose ou pas:
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('set null');
//->onDelete('set_null');
//->onDelete('setNull');
ou la même chose à propos de onUpdate
et à propos de no action
tout comme le phpMyAdmin
Merci
Vous pouvez faire toutes les options mentionnées dans phpmyadmin
de cette façon:
$table->...->onDelete('CASCADE');
$table->...->onDelete('SET NULL');
$table->...->onDelete('RESTRICT');
// do not call the onDelete() method if you want the RESTRICT option.
Vous devez vous assurer que vous définissez le champ de clé étrangère comme nullable:
$table->...->unsigned()->nullable();
Se référant au code source:
`vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php` in the function compileForeign()
Il ajoute simplement tout ce que vous transmettez à la requête de table.
if (! is_null($command->onDelete)) {
$sql .= " on delete {$command->onDelete}";
}
if (! is_null($command->onUpdate)) {
$sql .= " on update {$command->onUpdate}";
}
Assurez-vous donc de passer l'un des éléments suivants: "cascade", "aucune action", "restreindre" ou "définir null"
REMARQUE: Ne PAS utiliser des traits de soulignement dans les actions comme "set_null" et "no_action"