我正在尝试使用 cakephp 方法检索一些数据,但我不确定我是否可以仅使用一个查询来完成。
我有下面提到的表格
CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE dates (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
date_id int not null,
PRIMARY KEY (id),
FOREIGN KEY (date_id) REFERENCES dates(id)
);
CREATE TABLE orders_products (
order_id INT NOT NULL,
product_id INT NOT NULL,
qty INT NOT NULL,
PRIMARY KEY (product_id,order_id),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
我想从特定日期的所有订单中检索每种产品的数量(数量)的总和。
我知道如何在纯 sql 中进行查询,但我不知道如何使用 cakephp 方法进行查询。
SELECT products.id,count(op.qty) as quantity FROM orders INNER JOIN orders_products as op on op.order_id=orders.id INNER JOIN products on op.product_id= products.id WHERE orders.date_id = '1' GROUP BY products.id;
图像显示了 sql 查询给我的内容。
但是我无法使用 cakephp 方法获得相同的结果。
我尝试过的:
$query= $this->Orders->find();
$data = $query
->select([
'quantity' => $query->func()->count('qty'),
'pid'=> 'Products.id',
])
->innerJoinWith('Products')
->where(['date_id'=>2])->groupBy('pid');
结果:
object(Cake\\Collection\\Collection) id:0 {
'count' =\> (int) 1
}
好吧,我设法找到了一个我认为的解决方案,我不知道这是否是最好的方法,但它有效..如果你知道不同的方法,请写它。
主要问题是我使用 ->groupBy 而不是 ->group
$query= $this->Orders->find();
$data = $query
->select([
'sum' => $query->func()->count('qty'),
'pid'=> 'Products.id',
])
->select($this->Orders->Products)
->innerJoinWith('Products')
->where(['date_id'=>1])->group('pid')->all();