我在Laravel 5.4中有两个表。通过多对多关系加入的订单和产品

我正在尝试获取所有订单以及相关产品,如下所示:

$orders = Orders::with('products')->get();


我的订单模型将此设置为

public function products()
{
    return $this->belongsToMany('App\Product')
        ->withPivot('qty')
        ->withTimeStamps();
}


当我输出日志时,出现以下错误消息:

Next Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'order_product.order_order_id' in 'field list' (SQL: select `products`.*, `order_product`.`order_order_id` as `pivot_order_order_id`, `order_product`.`product_product_id` as `pivot_product_product_id`, `order_product`.`qty` as `pivot_qty`, `order_product`.`created_at` as `pivot_created_at`, `order_product`.`updated_at` as `pivot_updated_at` from `products` inner join `order_product` on `products`.`product_id` = `order_product`.`product_product_id` where `order_product`.`order_order_id` in (66, 67, 70, 72, 73, 74) and `products`.`deleted_at` is null) in /home/vagrant/Projects/vcc-backoffice/vendor/laravel/framework/src/Illuminate/Database/Connection.php:647


问题在于Laravel在数据透视表中查找一个不存在的表,该表名为“ order_order_id”。我还没有宣布要称为该列。我的数据透视表列称为“ order_id”和“ product_id”

我不知道Laravel如何假定数据透视表的名称。有没有一种方法可以在数据透视表中专门声明列名?还是我在命名约定上犯了一个错误?

最佳答案

编辑订单模型,然后尝试以下代码:

public function products()
{
    return $this->belongsToMany('App\Product','order_product','order_id','product_id')
        ->withPivot('qty')
        ->withTimeStamps();
}

关于php - Laravel Eloquent Eager Load假定不正确的数据透视表列名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45619564/

10-16 18:58