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)
我有一个关于 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)