Laravel迁移遇到问题。我想在两个表之间建立关系,但
一般错误:1005无法创建表eshopper
。prices
(错误号:150“外键约束的格式不正确”)(SQL:更改表prices
添加约束pri ces_product_id_foreign
外键(product_id
)引用products
(id
)。
这是我的代码。表是价格和产品。
价格
public function up()
{
Schema::create('prices', function (Blueprint $table) {
$table->id();
$table->float('amount');
$table->unsignedBigInteger('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products')->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
});
}
产品名称
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string("title",100);
$table->text("description");
$table->timestamps();
});
}
注意:在我的迁移中,产品表位于价格表之下,我知道第一个创建的表是价格而不是产品,这是错误的。我的问题是,我是否必须将产品放在第一位,或者我可以保持相同的布局(价格放在第一位,产品放在第二位)并更改代码中的某些内容?
3条答案
按热度按时间txu3uszq1#
这是因为
product_id
字段类型与products表中的id
字段不同,请在products迁移文件中尝试以下操作:628mspwn2#
您可以将限制条件放在
products
的移转档案中,而不是放在price
的移转档案中。因为它会先建立prices
表格,然后再建立products
,所以不会建立限制条件,因为products
表格尚未建立。第一个
mtb9vblg3#
简短的回答是,您必须将
products
放在prices
之前。如果整个代码仍在开发中,尚未部署,那么最简单的解决方案是重命名products
表迁移,使其具有比prices
迁移更早的时间戳。