计算包含的实体

Getting count of contained entities

我有一个 Lists 实体,其中包含 Item 个实体。我想在获取 Lists.

时获取 Items 的计数

这是我试过的查询:

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

这是行不通的。有什么帮助吗?谢谢。

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

可能有更优雅的方法,但我会做 find(),然后用 PHP:

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

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

(上面的代码不在我的脑海中 - 将其更多地作为伪代码来展示这个想法,因为可能存在一些小的语法问题......等等)

没关系,答案可以在docs.

中找到

示例代码片段:

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