【发布时间】:2016-08-13 17:47:07
【问题描述】:
我一直在使用 CakePHP 3 中结合关联进行的 SQL 函数查询。
情况如下:我有三个表,一个'products'表,一个'orders'表和一个名为'orders_products'的连接表。
在 OrdersController 的索引中,我想将总价格(= 相关产品价格的总和)添加到订单表中。在 SQL 中,这完全可以通过以下查询来完成:
SELECT orders.id, SUM(products.price)
FROM orders
LEFT JOIN orders_products
ON orders.id = orders_products.order_id
LEFT JOIN products
ON orders_products.product_id = products.id
GROUP BY orders.id;
我认为遵循控制器代码应该可以解决问题:
$orders = $this->Orders->find('all')->contain(['Products']);
$orders
->select(['total_price' => $orders->func()->sum('Products.price')])
->group('Orders.id');
但是,当查询对象被执行时,我得到一个错误:
错误:SQLSTATE[42S22]:找不到列:1054 未知列 '字段列表'中的'Products.price'
...即使定义了订单和产品之间的关联。
只调用$orders = $this->Orders->find('all')->contain(['Products'])->all(); 确实会返回一个订单数组,每个订单有许多产品,必须正确设置模型。有什么想法可能是错的吗?提前致谢!
来自OrdersTable:
$this->belongsToMany('Products', [
'foreignKey' => 'order_id',
'targetForeignKey' => 'product_id',
'joinTable' => 'orders_products'
]);
来自ProductsTable:
$this->belongsToMany('Orders', [
'foreignKey' => 'product_id',
'targetForeignKey' => 'order_id',
'joinTable' => 'orders_products'
]);
【问题讨论】:
标签: mysql cakephp-3.0 has-and-belongs-to-many