cakephp 具有关联表的复杂数据库查询

问题描述 投票:0回答:1

我正在尝试使用 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
}
cakephp cakephp-4.x
1个回答
0
投票

好吧,我设法找到了一个我认为的解决方案,我不知道这是否是最好的方法,但它有效..如果你知道不同的方法,请写它。

主要问题是我使用 ->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();
© www.soinside.com 2019 - 2024. All rights reserved.