2013-06-13 64 views
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')) 

我怎麼去這個正確的方式?我認爲我遇到了麻煩,因爲我的面向對象的知識是相當有限的。如果任何人有任何可以幫助我使find()函數更高效和簡化的示例或資源,我真的很感激它。

回答

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' i而不是'list',因爲'list'不支持contain選項。

所以現在如果你有其他條件 - 你只需要在參數中傳遞它。如果您將它留空 - 它將執行沒有條件語句的查詢。

+0

太棒了!非常感謝你爲我解決了很多問題 – user2444539