gpt4 book ai didi

mysql - CakePHP 3.x - ManyToMany 上的 SUM()

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:51 25 4
gpt4 key购买 nike

我一直坚持使用 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;

我想下面的 Controller 代码应该可以解决问题:

$orders = $this->Orders->find('all')->contain(['Products']);

$orders
->select(['total_price' => $orders->func()->sum('Products.price')])
->group('Orders.id');

但是,当执行查询对象时,出现错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Products.price' in 'field list'

...即使定义了订单和产品之间的关联。

仅调用 $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'
]);

最佳答案

一种方法:

$orders = $this->Orders->find()
->select([
'order_id' =>'orders.id',
'price_sum' => 'SUM(products.price)'
])
->leftJoin('orders_products', 'orders.id = orders_products.order_id'),
->leftJoin('products', 'orders_products.product_id = products.id')
->group('orders.id');

关于mysql - CakePHP 3.x - ManyToMany 上的 SUM(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com