Mysql Voyager管理面板中的多对多关系

Mysql Voyager管理面板中的多对多关系,mysql,laravel,Mysql,Laravel,当我尝试使用用于voyager的面包创建者添加具有多对多关系的新项目时,出现此错误: SQLSTATE[23000]:完整性约束冲突:中的1052列“id” 字段列表不明确SQL:从产品内部联接中选择id order\u product on products.id=order\u product.product\u id 其中order\u product.order\u id为空视图: D:\WindowsFolders\Documents\PHP\Voyager test\vendor\t

当我尝试使用用于voyager的面包创建者添加具有多对多关系的新项目时,出现此错误:

SQLSTATE[23000]:完整性约束冲突:中的1052列“id” 字段列表不明确SQL:从产品内部联接中选择id order\u product on products.id=order\u product.product\u id 其中order\u product.order\u id为空视图: D:\WindowsFolders\Documents\PHP\Voyager test\vendor\tcg\Voyager\resources\views\bread\edit-add.blade.PHP

我遵循了文档,但不确定问题出在哪里。在我看来,我的多对多设置应该在正常的Laravel中工作,但当我尝试在voyager面板中添加新订单项目时,它会抛出该错误。而且文档并没有指定父表中的额外字段应该是什么,我应该在哪里添加注释

这是我的订单和订单数据透视表

以下是产品表:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title')->nullable();
        $table->text('description');
        $table->string('image');
        $table->integer('price');
        $table->string('slug')->unique();
        $table->timestamps();
    });
}
以下是关系函数:

public function products()
{
    return $this->belongsToMany(Product::class, 'order_product');
}
最后是订单面包部分的图片:


在本例中,MySQL错误消息非常清楚:products和order_product表都有id字段。问题中sql语句的select列表只有id,因此MySQL无法决定从哪个表中选择id字段

您需要在字段名前加上表名,以清楚说明:

select products.id from ... 

我遇到了一个类似的问题,通过在Voyager Admin的json选项中将关系键从id更改为product_id解决了这个问题。换句话说,问题在于字段的选择和连接方式,而不是表本身。这是正确的。虽然从技术上讲,您可以从order_product表中删除id字段,并将order_id-product_id字段的组合作为主键,但您仍然缺少这两个字段中的唯一约束。试一试,我该怎么做?MySQL/Elotent对我来说仍然是最陌生的编程语言。你是说复合键吗?是的,你需要的是复合键还是多列键。
select products.id from ...