Cakephp 从相关表检索总和(值)
我有一个数据库表,比如说Person,每个人的投票都存储在投票表中 每个人都会有很多票,其中一些是上升票,一些是下降票,所以我对计数不感兴趣 我有以下查询来检索单个人的投票:Cakephp 从相关表检索总和(值),cakephp,model,relationship,Cakephp,Model,Relationship,我有一个数据库表,比如说Person,每个人的投票都存储在投票表中 每个人都会有很多票,其中一些是上升票,一些是下降票,所以我对计数不感兴趣 我有以下查询来检索单个人的投票: $votes = $this->Vote->query(" SELECT IFNULL( SUM( value ) , 0 ) AS vote_count FROM `votes` WHERE person_id = {$person_id}"); 每次我打电话给某人时,我是否可以为他获取这些信
$votes = $this->Vote->query("
SELECT IFNULL( SUM( value ) , 0 ) AS vote_count
FROM `votes`
WHERE person_id = {$person_id}");
每次我打电话给某人时,我是否可以为他获取这些信息
$this->person->find("all")
这可以通过以下方式实现:
在投票模型中,我添加了以下虚拟字段:
var $virtualFields = array(
'vote_count' => 'IFNULL( SUM( Vote.value ) , 0 )'
);
在Person模型中,我每次都通过使用以下$hasMany关系来检索它:
var $hasMany = array('Vote' => array('fields' => array('vote_count')));
请注意,默认情况下,它将始终检索投票表中的每个字段,这将导致在默认情况下检索“Vote_count”总和字段,并且如果要完整写出查询,则只会显示预期的一行
如果要检索所有行并删除总和虚拟字段,则需要在字段数组中指定除“投票计数”字段以外的所有字段(如有必要)
var $hasMany = array('Vote' => array('fields' => array('id', 'value')));
我建议通过在Person模型中设置两个函数来更好地控制这一点,这将允许您动态决定如何检索投票:
function allWithVoteCounts() {
$this->bindModel(array('hasMany' =>
array('Vote' => array(
'fields' => array('vote_count')
)
)
));
return $this->find('all');
}
function allVotes() {
$this->bindModel(array('hasMany' =>
array('Vote' => array(
'fields' => array('id', 'user_id', 'person_id', 'value', 'date')
)
)
));
return $this->find('all');
}
然后在控制器中,您可以调用:
$persons = $this->Person->allVotes();
或
$persons = $this->Person->allWithVoteCounts();