這可能是使用$virtualFields:
在投票模式中,我添加以下虛擬字段:
var $virtualFields = array(
'vote_count' => 'IFNULL(SUM(Vote.value) , 0)'
);
在Person模型我這個檢索使用以下$的hasMany關係,每次:
var $hasMany = array('Vote' => array('fields' => array('vote_count')));
注意,默認情況下,它會永遠在投票表中檢索每一個領域,這將導致檢索'vote_count'默認情況下爲SUM字段,如果要完整寫出查詢,將只顯示一行。
如果您想要檢索所有行並刪除SUM虛擬字段,則需要在字段數組中指定除「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();
這是完全錯誤的,將盡快更新 – going