Ich habe die Spalte user_id fk in meiner Tabelle
$table->foreign('user_id')->references('id')->on('users');
sollte ich hinzufügen auf Kaskadenlöschung Funktion zu dieser vorhandenen Spalte hinzufügen. Wie kann ich das machen?
Farid Movsumov
Ich habe die Spalte user_id fk in meiner Tabelle
$table->foreign('user_id')->references('id')->on('users');
sollte ich hinzufügen auf Kaskadenlöschung Funktion zu dieser vorhandenen Spalte hinzufügen. Wie kann ich das machen?
Farid Movsumov
Legen Sie zuerst den Fremdschlüssel ab. Danke Razor für diesen Tipp
$table->dropForeign('answers_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
@BrentConnor Wenn es bereits migriert und in Produktion ist, ja. Andernfalls können Sie die Migration rückgängig machen, die Originaldatei bearbeiten und dann erneut migrieren.
– Marcel Gruber
10. September 2015 um 22:32 Uhr
Zumindest in Laravel 5.7 in $table->dropForeign(‘answers_user_id_foreign’); muss sein: $table->dropForeign([‘template_id’]);
– D0rm1nd0
11. Dezember 2018 um 13:38 Uhr
kürzer und Sie müssen die Namenskonvention beim Löschen des Fremdschlüssels nicht kennen: $table->dropForeign([‘user_id’])
– Wütender UbuntuNerd
11. März 2019 um 18:18 Uhr
Was passiert mit Daten in diesen Spalten oder der Tabelle, wenn wir den Fremdschlüssel löschen?
– Prafulla Kumar Sahu
17. April 2019 um 11:37 Uhr
@PrafullaKumarSahu Sie lassen nur die Fremdschlüsseldefinition fallen. Sie verlieren keine Daten.
– Farid Movsumov
24. April 2019 um 9:04 Uhr
In meinem Fall muss ich den Spaltennamen in ein Array einfügen, sonst wird das ein Fehler sein.
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
$table->dropForeign([‘tank_id’]); $table->foreign(‘tank_id’)->references(‘id’)->on(‘tanks’)->onDelete(‘cascade’)->change();
– Biswajit Biswas
24. November 2021 um 10:37 Uhr
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
[Illuminate\Database\QueryException] SQLSTATE[HY000]: Allgemeiner Fehler: 1005 Kann Tabelle ‘xxx.#sql-5d7_226’ nicht erstellen (Fehlernummer: 121) (SQL: alter table xxx
Einschränkung hinzufügen answers_user_id_foreign Fremdschlüssel (user_id
) Verweise users
(id
) auf Löschkaskade)
– Farid Movsumov
8. November 2014 um 23:16 Uhr
Dann sollten Sie es vielleicht als Fehler melden, denn das ist das Offizielle dokumentierte Methode
– Markus Bäcker
9. November 2014 um 0:09 Uhr
Rasierer
Der Laravel-Schema-Builder kann im aktuellen Zustand keine Spalten ändern, daher verwenden Sie Rohabfragen. Sie müssen die löschen und neu erstellen Zwang:
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);'
);
}
Danke für die Antwort auf die Frage. Helfen Sie mir, zu diesem Arbeitscode in L5.1 zu gelangen:
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();
});
}
Feinfuß
Verwenden Sie die vorzeichenlose Funktion zu user_id
in der aktuellen Migration:
$table->interger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('table_name')->onDelete('cascade');
Genaues Design
Ab laravel 7.0
Sie können verwenden $table->foreignId('user_id');
es ist ein Alias von $table->unsignedBigInteger('user_id');
Unsere einzeilige Lösung zum Löschen der Fremdschlüsselspalte sieht also wie folgt aus:
$table->foreignId('user_id')->constrained('users')->onDelete('cascade');
Verwenden Sie eine Rohabfrage
DB::statement('..')
. Wie heißt dein Tisch?– Rasierer
8. November 2014 um 23:23 Uhr
Name der Tabelle ist “Antworten”
– Farid Movsumov
8. November 2014 um 23:24 Uhr