web-dev-qa-db-fra.com

Actions disponibles pour onUpdate / onDelete dans Laravel 5.x

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

enter image description here


Merci

12
bobD

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();
22
Rafael Berro

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"

2
Jaspal Singh