我一直在努力学习如何以正确的方式学习胖模型和瘦调控制器,因为在我的模型基本上没有代码之前我正试图改变它。我的功能有效,但现在我正在尝试组合两个看起来几乎完全相同的find()查询,除了其中一个有简单的条件。
我的模型看起来像这样:
function pieChart() {
//Get Data for PieChart
$this->RecordDrug->virtualFields['sum'] ='COUNT(*)';
$records = array();
$records=$this->RecordDrug->find('list',
array('fields' => array( 'Drug.drug', 'sum'),
'contain' => array( 'Drug', 'Record' ),
'group' => 'Drug.Drug'
));
$this->set('output',$records);
return $records;
}
I will have two controllers using this. One of them will use this code as is, just simply call the pieChart() function. The other controller will have to see a condition that only selects the users entries. So
'conditions' => array('Record.user_id' => $this->Auth->user('id'))
我如何以正确的方式解决这个问题?我想我遇到了麻烦,因为我的OOP知识非常有限。如果有人有任何示例或资源可以帮助我提高find()函数的效率和简化,我真的很感激。
答案 0 :(得分:1)
我做的很简单:
public function myQuery($conditions = null) {
$this->virtualFields['sum'] ='COUNT(*)';
$result = $this->find('all', array('conditions' => $conditions,
'fields' => array('Drug.drug', 'sum'),
'contain' => array('Drug','Record'),
'group' => 'Drug.Drug'
));
return $result;
}
现在你可以用你的论点来调用它:
$conditions = array('Record.user_id' => $this->Auth->user('id'));
$data = $this->RecordDrug->myQuery($conditions);
或没有它:
$data = $this->RecordDrug->myQuery();
请注意,在这种情况下,您需要将myQuery()
放入RecordDrug模型,并且需要使用'all'
而不是'list'
,因为'list'
不支持{ {1}}选项。
所以现在如果你有其他条件 - 你只需要在参数中传递它。如果你把它留空 - 它在没有条件声明的情况下进行查询。