Laravel 迁移一对一关系错误

Laravel migrate one to one relationships error

我有一个关于 laravel 迁移 table 的问题。我在 2 table 之间有一对一的关系。订单行和工单。我已将这两个函数放在模型 Ticket 和 OrderLine 中:

public function orderline()
{
    return $this->hasOne('App\OrderLine');

} 

public function ticket()
{
    return $this->hasOne('App\Ticket');
}    

并且在迁移文件中 create_tickets_table 模式:

public function up()
{
    Schema::create('tickets', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('order_line_id')->unsigned(); //foreign key
        $table->string('number');
        $table->float('price');
        $table->timestamps();

        $table->foreign('order_line_id')->references('id')->on('order_lines');//relationship  one to one between orderline & ticket tables
    });
}

并且在迁移文件中 create_order_lines_table 架构:

  public function up()
{
    Schema::create('order_lines', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('ticket_id')->unsigned();//foreign key
        $table->integer('order_id')->unsigned(); //foreign key
        $table->float('total_order_line');
        $table->timestamps();

        $table->foreign('ticket_id')->references('id')->on('tickets');//relationship  one to one between orderline & ticket tables

        $table->foreign('order_id')// relationship one to many between order & order line tables
        ->references('id')->on('orders')
            ->onDelete('cascade');
    });
}

当我执行 php artisan 迁移时,我仍然遇到此错误:

bruno@bruno-HP-EliteBook-840-G4:~/projetconcert$ php artisan 迁移 迁移 table 创建成功。

Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误: 1005 无法创建 table gestion_concert_spectacle.#sql-e08_30d (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table order_lines add constraint order_lines_ticket_id_foreign foreign key (ticket_id) references tickets (id))

有人知道如何解决吗?谢谢你。布鲁诺

将外键定义移至第二个函数 Schema::table(... 或者由于您要在多个表之间创建约束,因此在创建所有必需的表后在下次迁移中添加外键。

请记住,在创建外键时,您首先需要正确构建相应的表

附带说明一下,在构建数据库结构时不需要创建模型关系。之后您可以安全地创建它们...

我以前遇到过这样的问题。只需将 $table->integer('order_line_id')->unsigned(); 更改为 $table->unsignedInteger('order_line_id');与所有其他外国 ID 相同(order_id 和 ticket_id)