计算包含的实体

时间:2015-04-08 21:34:29

标签: cakephp cakephp-3.0

我有一个Lists实体,其中包含Item个实体。我在抓取Items时想要获得Lists的统计数。

这是我试过的查询:

$lists = $this->Lists->find()
            ->contain(["Items" => function($q){
                return $q->select(["count" => $q->func()->count("*")]);
            }])
            ->all();

哪个不起作用。有帮助吗?感谢。

2 个答案:

答案 0 :(得分:1)

没关系,答案可以在docs中找到。

示例代码段:

$lists = $this->Lists->find();
$lists
    ->select(["Lists.id", "itemCount" => $lists->func()->count("Items.id")])
    ->matching("Items")
    ->group(["Lists.id"])
    ->all();

答案 1 :(得分:0)

我建议只使用PHP来获取计数,而不是依赖于一堆不必要的计数查询(可以快速占用资源)。

可能有更优雅的方式,但我会做find(),然后用PHP附加计数:

$lists = $this->Lists->find()
    ->contain(["Items"])
    ->all();

foreach($lists as &$list) {
    $list['Items']['count'] = count($list['Items']);
}

(上面的代码不在我的脑海中 - 把它当作伪代码来表示想法,因为可能会有轻微的语法问题......等等。)