CakePHP组和计数

时间:2018-11-15 07:42:57

标签: php mysql cakephp cakephp-3.x

我在解决这个问题上遇到了麻烦。

我有以下3个表:-

交易记录表

  • ID
  • 日期
  • 列表项

产品表

  • ID

  • 名称

  • 价格

Products_Transactions表

  • 交易ID

  • Product_ID

  • 数量

因此关系如下-进行交易,然后products_transactions表将它们连接在一起,因为一个交易可以有多个产品,一个产品可以有多个交易。 join_table还跟踪销售量,例如,某报纸在交易#1中出售,数量为2(因此售出2份报纸)。

现在,我想做一个MySQL语句,在指定的日期间隔内查找所有已售出的产品,因此我得到如下信息:-

  • 3 x报纸
  • 12 x苏打水
  • 15 x啤酒

因此,它只是计算并汇总所有出售的产品。

我已经认真尝试了一切-我正在使用CakePHP,因此所提供的解决方案将有所帮助,但是即使是普通的SQL来实现此目标也可能会有所帮助。

到目前为止,这就是我所拥有的--

$productTransactionsTable = TableRegistry::get('products_transactions');
    $productsTransactions = $productTransactionsTable->find('all');
    $productsTransactions->matching('transactions', function ($q) {
        return $q->where([
            'transaction_date >=' => new \DateTime('-1 week'),
            'transaction_date <=' => new \DateTime('now'),
            'device_id IN' => $this->deviceIdsInDepartment(2)
        ]);
    });
    $productsTransactions->contain(['products']);

    $productsTransactions->select([
        'count' => $productsTransactions->func()->count('quantity'),
        'name' => 'products.name'
    ]);

    $productsTransactions->groupBy('products.id');

但这仅给出1个单一结果,将所有结果一起计入1行,如下所示:

/src/Controller/EconomyController.php (line 665)

[     (int)0 => object(Cake \ ORM \ Entity){

    'count' => (int) 4504,
    'name' => 'D Morgenbrød',
    '[new]' => false,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'products_transactions'

}

]

感谢您的帮助!我被严重卡在这里!

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您正在计算销售数量和分组的总数,因此您将获得超越结果的结果。我认为,您需要尝试以下方法:

$data = $query
    ->select([
      'name' => 'products.name',
      'quantity' => 'products.quantity',
    ])
    ->group('products.id');