1

我一直在尝试更多地了解如何以正确的方式拥有胖模型和瘦控制器,因为在我的模型基本上没有代码之前,我正在尝试改变它。我的函数有效,但现在我试图组合两个看起来几乎完全相同的 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() 函数更加高效和精简,我将不胜感激。

4

1 回答 1

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'不支持contain选项。

所以现在如果你有额外的条件 - 你只需要在参数中传递它。如果您将其保留为空 - 它会在没有条件语句的情况下进行查询。

于 2013-06-13T08:23:35.840 回答