web-dev-qa-db-fra.com

Laravel :: Meilleur moyen de mettre à jour la clé étrangère

J'ai ce fichier de migration

Schema::create('table_one', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->string('name'); 
    $table->integer('table_two_id')->unsigned(); 
    $table->foreign('table_two_id')->references('id')->on('table_two'); 
    $table->timestamps(); 
});

et je veux mettre à jour pour le faire -> onDelete ('cascade');

$table->foreign('table_two_id')->references('id')->on('table_two')->onDelete('cascade');

Quelle est la meilleure façon de procéder?

Y a-t-il quelque chose comme -> change ();

Merci

11
Yevgeniy Afanasyev

Supprimez la clé étrangère, puis ajoutez-la à nouveau et lancez migrate 

public function up()
{
    Schema::table('table_one', function (Blueprint $table) {
        $table->dropForeign('table_two_id');

        $table->foreign('table_two_id')
            ->references('id')
            ->on('table_two')
            ->onDelete('cascade');
    });
}
18
Borut Flis

Christopher K. a raison, aux Laravel docs:

Pour supprimer une clé étrangère, vous pouvez utiliser la méthode dropForeign. Les contraintes de clé étrangère utilisent la même convention d'appellation que les index. Donc, nous concaténerons le nom de la table et les colonnes de la contrainte, puis nous ajouterons le nom "_foreign"

$table->dropForeign('posts_user_id_foreign'); 

Vous pouvez également passer une valeur array qui utilisera automatiquement le nom de la contrainte conventionnelle lors de la suppression:

$table->dropForeign(['user_id']);

https://laravel.com/docs/5.7/migrations#foreign-key-constraints

0
Ricard