简单的问题:我是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');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
在此示例中,我们声明user_id列引用users表上的id列。确保首先创建外键列! user_id列声明为unsigned,因为它不能具有负值。
您还可以为约束的“on delete”和“on update”操作指定选项:
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
要删除外键,可以使用dropForeign方法。与其他索引一样,外键使用类似的命名约定:
$table->dropForeign('posts_user_id_foreign');
如果你是Laravel和Eloquent的新手,可以试试laracasts上的Laravel From Scratch系列。这对初学者来说是一个很好的指南。
您应该创建一个新的迁移文件,例如'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::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');
});