关于如何获得一个名为点的字段的总数,我进行了高低搜索。我只需要一个总数字,但我能得到的最好结果是来自积分表的记录列表以及来自成员的相关记录。
$totalPoints = $this->Member->Point->find('all', array(
array('fields' => array('sum(Point.points) AS Point.ctotal'))));
关于如何获得一个名为点的字段的总数,我进行了高低搜索。我只需要一个总数字,但我能得到的最好结果是来自积分表的记录列表以及来自成员的相关记录。
$totalPoints = $this->Member->Point->find('all', array(
array('fields' => array('sum(Point.points) AS Point.ctotal'))));
为什么不使用文档中记录和建议的 virtualFields? http://book.cakephp.org/2.0/en/models/virtual-fields.html
$this->Member->Point->virtualFields['total'] = 'SUM(Point.points)';
$totalPoints = $this->Member->Point->find('all', array('fields' => array('total')));
这样干净多了。
还要注意你在 $options 数组 ( ...find('all', array(array(...
) 中得到的双数组。以及我如何只使用单个/平面数组。这就是为什么您的 SUM() 作为字段调用不起作用的原因。
马克上面的回答是对的。我只想补充一点,您可以这样做:
$totalPoints = $this->Member->Point->find('first', array(
array('fields' => array('sum(Point.points) AS Point__ctotal'))));
$totalPoints
会有这个:
$totalPoints['Point']['ctotal']
另一种不输出数组的干净方式
$this->Member->Point->virtualFields = array('total' => 'SUM(Point.points)');
$total = $this->Member->Point->field('total');