php 使用Laravel迁移建立关系时出现问题

n53p2ov0  于 2022-11-28  发布在  PHP
关注(0)|答案(3)|浏览(110)

Laravel迁移遇到问题。我想在两个表之间建立关系,但
一般错误:1005无法创建表eshopperprices(错误号:150“外键约束的格式不正确”)(SQL:更改表prices添加约束pri ces_product_id_foreign外键(product_id)引用productsid)。
这是我的代码。表是价格和产品。
价格

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();
        });
    }

注意:在我的迁移中,产品表位于价格表之下,我知道第一个创建的表是价格而不是产品,这是错误的。我的问题是,我是否必须将产品放在第一位,或者我可以保持相同的布局(价格放在第一位,产品放在第二位)并更改代码中的某些内容?

txu3uszq

txu3uszq1#

这是因为product_id字段类型与products表中的id字段不同,请在products迁移文件中尝试以下操作:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->unsignedBigInteger('id', true); // true here means it's auto incremental
        $table->string("title",100);
        $table->text("description");
        $table->timestamps();
    });
}
628mspwn

628mspwn2#

您可以将限制条件放在products的移转档案中,而不是放在price的移转档案中。因为它会先建立prices表格,然后再建立products,所以不会建立限制条件,因为products表格尚未建立。
第一个

mtb9vblg

mtb9vblg3#

简短的回答是,您必须将products放在prices之前。如果整个代码仍在开发中,尚未部署,那么最简单的解决方案是重命名products表迁移,使其具有比prices迁移更早的时间戳。

相关问题