我回来向某些表添加外键但这个表不起作用。
Schema::table('users', function(Blueprint $table){
$table->integer('account_type')->unsigned()->change();
$table->foreign('account_type')
->references('id')
->on('account_types');
});
它会在终端中抛出这3个错误:
[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint `users_account_type_foreign` foreign key (`account_type`) references `account_types` (`id`))
[Doctrine\DBAL\Driver\PDOException]SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
[PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
知道我需要做些什么才能解决这个问题?我无法点击users表中的account_type字段,并在使用SequelPro时被带到account_types表中的相关帐户类型。
答案 0 :(得分:0)
您的表'account_type'需要在'users'表之前创建。
基本上在Laravel上,用户表是第一个创建的,要解决它,您可以将所有架构放在一个迁移文件中。或者您需要更改用户文件名称中的日期,因为laravel按名称顺序执行迁移。
我按照以下方式进行迁移:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class DatabaseContent extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$connection = config('database.default');
Schema::connection($connection)->create('account_type', function
(Blueprint $table) {
// Own Method
}
Schema::connection($connection)->create('users', function
(Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
答案 1 :(得分:0)
我建议你专门创建一个迁移来添加外键约束。应该以这样的方式创建迁移,即对数据库的每次更改都是新迁移。这样,如果出现问题,你可以回滚。正如你所说的那样,“返回添加”可能是问题的根源。与某些用户建议的一样,创建迁移的顺序对于数据库的构建方式至关重要。并且您必须创建两个参与表,以便在它们上创建外键。
答案 2 :(得分:0)
如果我们假设您已经创建了account_types
和users
,那么您可以这样做。
运行此命令以创建新的迁移。
php artisan make:migration add_account_type_to_users
然后将此添加到您的up函数中,这样做将更新已存在的users
表,添加列account_type
,然后将外键添加到account_types
表
public function up()
{
Schema::table('users', function(Blueprint $table) {
$table->integer('account_type')->unsigned();
$table->foreign('account_type')->references('id')->on('account_types');
});
}
然后将此添加到您的向下功能,以允许迁移顺利运行,以便将来进行更改和/或刷新。
public function down()
{
Schema::table('users', function(Blueprint $table) {
$table->dropColumn('account_type');
});
}
我假设您的问题与迁移文件的约会有关 - 我建议您仔细检查它们并确保它们以正确的顺序执行。