cakephp-3.0 - 如何从包含的表中返回 sum()?

标签 cakephp-3.0

我的 Matches 表中有一个自定义查找器方法,它包含一些其他表,我想返回其中一个包含的字段的总和值。

到目前为止,我有以下内容。

/**
 * Custom finder to find the latest matches played
 *
 * @param Query $query
 * @param array $options
 * @return $this
 */
    public function findLatestMatches(Query $query, array $options) {
        return $query->contain([
                'Venues' => function ($q) {
                    return $q->select(['id', 'name', 'location']);
                },
                'Formats' => function ($q) {
                    return $q->select(['id', 'name']);
                },
                'Teams' => [
                    'Clubs' => function ($q) {
                        return $q->select(['id', 'image', 'image_dir']);
                    }
                ],
                'Innings' => [
                    'InningsTypes',
                    'Batsmen' => function ($q) {
                        /* @var \Cake\ORM\Query $q */
                        return $q->select(['totalRuns' => $q->func()->sum('runs')]);
                    },
                    'Bowlers',
                    'Wickets' => function ($q) {
                        /* @var \Cake\ORM\Query $q */
                        return $q->select(['totalWickets' => $q->func()->count('id')]);
                    }
                ]
            ])
            ->order(['when_played' => 'DESC']);
    }

这段代码可以正常执行,不会产生任何错误。同时检查 DebugKit 中的 SQL 选项卡显示 sql 已被执行。

SELECT (SUM(runs)) AS `totalRuns` FROM batsmen Batsmen WHERE Batsmen.innings_id in ('841fce60-0178-450f-99e8-ad1670f5c84f','93daddf5-256b-4420-b636-0db626baae72','b398d1a0-2c7d-41f7-b2c3-8ea00ddfcece','f949bb45-3d8b-46f5-8967-cc1340a9c1e7')

但是,数据在任何返回的实体中都不可用。在哪里可以找到我的汇总数据?

最佳答案

此后我对此进行了一些重构,并将 Bowlers wickets 移到他们自己的自定义查找器中,以在该查找器中使用。

以下是我如何使用我的 Bowlers 自定义查找器。

public function findBowlersWickets(Query $query, array $options)
{
    return $query->contain([
        'Innings' => [
            'Wickets' => [
                'PlayerBowledWicket',
            ]
        ]
    ])
        ->select(['totalWickets' => $query->func()->count('*')])
        ->matching('Innings.Wickets.PlayerBowledWicket', function ($q) {
            return $q->where([
                'AND' => [
                    'Wickets.bowler_player_id = Bowlers.player_id',
                    'Wickets.innings_id = Innings.id'
                ]
            ]);
        })
        ->group(['Innings.id', 'Bowlers.player_id'])
        ->order(['totalWickets' => 'DESC'])
        ->autoFields(true);
}

关于cakephp-3.0 - 如何从包含的表中返回 sum()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232828/

相关文章:

mysql - 错误: SQLSTATE[42S22]: Column not found: 1054

蛋糕PHP 3 : How to automatically log a user in after registration

php - 如何在CakePHP 3. *中以各种形式在项目中添加csrf,安全 token

mysql - 调试套件显示重复的查询

css - Cakephp 3 侧导航调整大小

蛋糕PHP 3 : FormHelper to load <label> after &lt;input&gt;?

cakephp - 字段 "created"和 "modified"在 CakePHP3.0.0(dev preview 2) 中不会自动设置

datetime - CakePHP 3 : check date greater than today

php - CakePHP 3 - 多条件查找

Cakephp 3 : How to receive get request data?