簡単な質問:Laravelは初めてです。私はこの移行ファイルを持っています:
_Schema::create('lists', function(Blueprint $table) {
$table->increments('id');
$table->string('title', 255);
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
_
onDelete('cascade')
を追加して更新したい。
これを行う最良の方法は何ですか?
まず、user_id
フィールドインデックス:
$table->index('user_id');
その後、カスケードのアクションで外部キーを作成できます。
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
新しい移行でそれを行う場合は、最初にインデックスと外部キーを削除し、最初からすべてを行う必要があります。
Down()関数ではこれを行う必要があり、次にup()関数で上記で記述したことを実行します。
$table->dropForeign('lists_user_id_foreign');
$table->dropIndex('lists_user_id_index');
$table->dropColumn('user_id');
Schema::create('roles',function(Blueprint $table){
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
Schema::create('permissions',function(Blueprint $table){
$table->unsignedBigInteger('role_id');
$table->foreign('role_id')->references('id')->on('roles');
$table->string('permission');
});
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
この例では、user_id列がidを参照していることを示していますusersテーブルの列。最初に外部キー列を作成してください! user_id列は負の値を持つことができないため、符号なしとして宣言されます。
制約の「削除時」および「更新時」アクションのオプションを指定することもできます。
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
外部キーを削除するには、dropForeignメソッドを使用できます。他のインデックスに使用されるのと同様の命名規則が外部キーに使用されます。
$table->dropForeign('posts_user_id_foreign');
LaravelとEloquentがかなり初めての場合は、ゼロからのLaravelシリーズはララキャストで利用できます。それは初心者のための素晴らしいガイドです。
新しい移行ファイルを作成する必要があります 'add_user_foreign_key.php'としましょう
public function up()
{
Schema::table('lists', function(Blueprint $table)
{
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('lists', function(Blueprint $table)
{
$table->dropForeign('user_id'); //
});
}
実行
php artisan migrate
onDelete('cascade')
を追加したい場合は、インデックスを削除して再度作成します。
public function up()
{
Schema::table('lists', function($table)
{
$table->dropForeign('lists_user_id_foreign');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
public function down()
{
Schema::table('lists', function($table)
{
$table->dropForeign('lists_user_id_foreign');
$table->foreign('user_id')->references('id')->on('users');
});
}
Schema::table('posts', function (Blueprint $table) {
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});