Ajouter" ON DELETE CASCADE " à la colonne existante de Laravel
j'ai la colonne user_id fk dans ma table
$table->foreign('user_id')->references('id')->on('users');
je devrais ajouter sur supprimer en cascade fonction de cette colonne existante. Comment puis-je faire cela?
7 réponses
nous devrions d'abord laisser tomber la clé étrangère. Grâce à Rasoir pour cette astuce
$table->dropForeign('answers_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
Laravel schema builder ne peut pas modifier les colonnes à l'état actuel, donc vous utiliserez des requêtes brutes. Vous devrez laisser tomber et recréer le contrainte:
PostgreSQL
function up()
{
DB::statement('alter table answers drop constraint answers_user_id_foreign,
add constraint answers_user_id_foreign
foreign key (user_id)
references users(id)
on delete cascade;'
);
}
function down()
{
DB::statement('alter table answers drop constraint answers_user_id_foreign,
add constraint answers_user_id_foreign
foreign key (user_id)
references users(id);'
);
}
MySQL
function up()
{
DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
DB::statement('alter table answers add constraint answers_user_id_foreign
foreign key (user_id)
references users(id)
on delete cascade;'
);
}
function down()
{
DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
DB::statement('alter table answers add constraint answers_user_id_foreign
foreign key (user_id)
references users(id);'
);
}
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
Merci pour la réponse aux questions. Aide-moi à trouver ce code de travail en L5.1:
public function up()
{
Schema::table('transactions', function (Blueprint $table) {
$table->dropForeign('transactions_order_id_foreign');
$table->foreign('order_id')
->references('id')->on('orders')
->onDelete('cascade')
->change();
});
Schema::table('orders', function (Blueprint $table) {
$table->dropForeign('orders_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade')
->change();
});
}
$table->integer('user_id')->unsigned();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
je suppose que vous avez utilisé Illuminate\Database\Schema\Blueprint::primary()
pour créer users.id
. Si c'est le cas, alors users.id
ne seront pas signés. Par conséquent, votre colonne de clé étrangère user_id
doit aussi être non signé.
la réponse de Farid Movsumov a fonctionné pour moi. Vous devez vérifier "answers_user_id_foreign" dans la structure MySQL. En bas, dans phpmyadmin est une table appelée index où vous trouverez votre équivalent
dans mon cas, je vais avoir besoin de mettre le nom de col dans un tableau qui sera une erreur.
Schema::table('transactions', function (Blueprint $table) {
$table->dropForeign(['transactions_order_id_foreign']);
$table->foreign('order_id')
->references('id')->on('orders')
->onDelete('cascade')
->change();
});
mysql 5.7 ver