无法添加外键约束 - Laravel 委托
Cannot add foreign key constraint - Laravel Entrust
我真的不知道哪里出了问题,但是我不能用这个查询添加外键约束。
alter table `__acc_role_user` add constraint `__acc_role_user_user_id_foreign` foreign key (`user_id`) references `__acc_accounts` (`account_id`) on delete cascade on update cascade
我如何创建帐户 table?
Schema::create('__acc_accounts', function($table)
{
$table->integer('account_id')->increments();
$table->integer('points')->default(0);
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
});
然后Entrust Migration(下面只有有问题的部分):
Schema::create('__acc_role_user', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('user_id')->references('account_id')->on('__acc_accounts')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('__acc_roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'role_id']);
});
这个语法更好:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('__acc_accounts', function($table)
{
$table->integer('account_id')->increments();
$table->integer('points')->default(0);
});
Schema::table('__acc_accounts', function(Blueprint $table)
{
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('__acc_accounts');
}
而且非常重要!在你的迁移顺序中必须是:先创建table 'accounts'然后再创建'__acc_accounts'。
Tables with foreign keys should be created after the tables they reference to have been created.
这个http://blog.kongnir.com/2015/03/08/laravel-order-of-migrations-with-foreign-keys/可以帮助你理解这一点。
我真的不知道哪里出了问题,但是我不能用这个查询添加外键约束。
alter table `__acc_role_user` add constraint `__acc_role_user_user_id_foreign` foreign key (`user_id`) references `__acc_accounts` (`account_id`) on delete cascade on update cascade
我如何创建帐户 table?
Schema::create('__acc_accounts', function($table)
{
$table->integer('account_id')->increments();
$table->integer('points')->default(0);
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
});
然后Entrust Migration(下面只有有问题的部分):
Schema::create('__acc_role_user', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('user_id')->references('account_id')->on('__acc_accounts')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('__acc_roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'role_id']);
});
这个语法更好:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('__acc_accounts', function($table)
{
$table->integer('account_id')->increments();
$table->integer('points')->default(0);
});
Schema::table('__acc_accounts', function(Blueprint $table)
{
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('__acc_accounts');
}
而且非常重要!在你的迁移顺序中必须是:先创建table 'accounts'然后再创建'__acc_accounts'。
Tables with foreign keys should be created after the tables they reference to have been created.
这个http://blog.kongnir.com/2015/03/08/laravel-order-of-migrations-with-foreign-keys/可以帮助你理解这一点。