当前位置: 首页 > 知识库问答 >
问题:

使用“php artisan migrate”命令时发生Laravel数据库迁移外键错误

姬向明
2023-03-14

错误: SQLSTATE[HY000]:常规错误: 1005不能创建表epicit_cms.ep_users(errno: 150"外键约束格式不正确")(SQL:更改表ep_users添加约束ep_users_client_id_foreign外键(client_id)引用ep_clientsid)在删除级联)

有人能解释一下该怎么办吗?

我想要达到的是。如果我想删除一个客户端,它也应该删除具有相同客户端id的用户,但我无法实现,因为我无法迁移外键

迁移:

用户表

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('name');
        $table->string('insertion')->nullable();
        $table->string('secondname');
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('client_id');  
        $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');            
        $table->boolean('admin')->default(0);
        $table->rememberToken();
        $table->timestamps();
    });

    
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('users');
}

客户表

public function up()
{
    Schema::create('clients', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('company_name');
        $table->string('postal_code');
        $table->string('street');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('clients');
}

模型:

用户关系

public function Client()
{
    return $this->belongsTo(Client::class );
}

客户关系

public function user()
{
    return $this->hasMany(User::class);
}

共有3个答案

阎啸
2023-03-14

好的,谢谢你们展示了不止一种方法。我使用这个$表修复了我的代码-

孟文栋
2023-03-14

您应该确保您的Clients表迁移在user表迁移之前运行。

而且您的外键字段和id应该是相同的类型,例如,如果clients.idbigingress,则用户表中的外键也应该是biginger

籍星汉
2023-03-14

像这样改变你的迁移

   public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('name');
            $table->string('insertion')->nullable();
            $table->string('secondname');
            $table->string('email')->unique();
            $table->string('password');
            $table->foreignId('client_id')
                ->constrained()
                ->onDelete('cascade');            
            $table->boolean('admin')->default(0);
            $table->rememberToken();
            $table->timestamps();
        });
    
        
    }
    
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
 类似资料:
  • 我有两个表,事务表和付款表,它们在过去的迁移中已经存在。当我试图在它们之间建立一个透视表时,只会得到事务外键的一个错误。“payments”表上的另一个外键创建得很好。这绝对让我感到困惑,我之前关于这个错误的讨论都没有解决这个问题。 错误(参考,MAccounting是数据库的名称): *尽管错误似乎说,payment_transaction表创建成功,以及支付表的外键;唯一中断的是交易的外键。

  • Laravel5.6运行于:PHP7.2,MariaDB 10.3 当我想为我的表设置外键时,我只是不断地犯这个错误。 在其他表中,由Laravel本身定义的所有id变量和无符号自动增量 所以,我的迁移是这样的: 错误如下所示: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在LINE 1(SQL:alter

  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 我创建了一个名为用户的表。有一些表被称为公司、名称、部门。我想添加company_id,designation_id,department_id列到用户表作为外键。 我试过了,但没用 当我迁移迁移时,它会显示此错误。 Illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(SQL:alter

  • 我想在用户表中添加一个外键: 一个用户有一个城镇(法语为ville),一个城镇可以有多个用户: 我的村庄(城镇)迁移 我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes: 我在终端中发现了这个错误: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:al

  • 当尝试使用artisan迁移数据库中带有表“user”的Laravel 4时: 我收到此错误: C: \xampp\htdocs\laravel [21.04.2014 02:27:56通知]目前不允许事件报告。Reaso ns:启动前或关闭后{"错误":{"类型":"Symfony\Component\HttpKernel\Exception\NotFoundHttpExcepti on","消