从CakePHP 2.9中的匹配记录中获取数据库列的平均值

时间:2018-08-28 16:50:30

标签: mysql cakephp

是否有一种方法(除了完全自定义的SQL之外)还可以从满足CakePHP 2.9中某些条件的记录中查找表列的平均值?

例如,我可以通过调用Field模型轻松地找到Fields列表:

$fields = $this->Field->find('all', array(
    'conditions' => array(
        'User.username' => 'John Doe',
        'Report.created' => '2018-01-01'
    )
);

但是,对于所有匹配的记录,我真正想要得到的是Field.value平均值

我通常可以做的是原始SQL查询;

$average = $this->Field->query('
    select avg(f.value) as average from fields f 
      left join users u on (f.user_id = u.id) 
      left join reports r on (f.report_id = r.id) 
      where u.username = "John Doe" and r.created = "2018-01-01"
');

但是,我不一定知道条件字段是什么,我想使用CakePHP ORM的功能来构建查询。

是否可以通过Model::find计算该平均值?

1 个答案:

答案 0 :(得分:1)

假设您遵循Cakephp约定。您可以对字段进行平均,如下所示。

$average = $this->Field->find('all', array(
'fields' => array('AVG(Field.value) as average'),
'conditions' => array('User.username' => 'John Doe', 'Report.created' => '2018-01-01'),
'contain' => array('User', 'Report')
));

希望你会明白的。