我在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正在Pivot中寻找一个名为" order_order_id "哪个不存在。我还没有宣布要调用该列。我的数据透视表列名为" order_id "和" product_id "
我不知道Laravel如何假设数据透视表名称。有没有办法在数据透视中专门声明列名?或者我在命名约定中犯了错误?
答案 0 :(得分:1)
如果您有两个名为Order
&的模型Product
之间的orders
和many_to_many关系与他们的数据库表格如products
& order_product
然后Laravel将搜索名为order_product
的数据透视表(模型名称按字母顺序排列并加入' _')。
order_id
表格由两列product_id
,LOAD CSV WITH HEADERS FROM "file:/Users/MATT/Documents/LL.csv" As csvline
MATCH(n) RETURN n
组成。简而言之,这是数据透视表的基本命名约定:)。
答案 1 :(得分:0)
修改订单模型并尝试以下代码:
public function products()
{
return $this->belongsToMany('App\Product','order_product','order_id','product_id')
->withPivot('qty')
->withTimeStamps();
}