2011-06-01 55 views
5

我是CakePHP的新手,無法弄清楚如何使用Containable行爲調用模型類的read()方法。我可以做與find()CakePHP - 是否可以使用read()方法使用Containable行爲?

$this->T->find('all', array (
    'contain' => array (
     'C', 
     'L' => array (
      'fields' => array ('L.id, L.time'), 
      'I' => array (
       'fields' => array ('I.id','I.time'), 
       'J.name', 
       'J.id' 
      ) 
     ) 
    ) 
); 

這工作就像我所料,但我不希望得到T的實例,而是一個使用id = $ id,這樣我可以通過它的下面到「視圖」視圖。但數組傳遞給查找不起作用時

$this->T->read(
array (
     'contain' => array (
      'C', 
      'L' => array (
       'fields' => array ('L.id, L.time'), 
       'I' => array (
        'fields' => array ('I.id','I.time'), 
        'J.name', 
        'J.id' 
       ) 
      ) 
     ) 
, $id) 

有沒有辦法做到這一點?

回答

16

您還可以設置read()調用之前:

$this->T->id = $id; 
$this->T->contain(array(...)); 
$this->T->read(); 
+1

由於find沒有設置Model-> data變量,所以使用find(first)和read()的效果並不相同。如果他只想要數據移動到視圖中,find(第一個)解決方案是好的,但是像Dunhamzzz說的那樣 - 這個問題要麼需要糾正,要麼與答案的關係清晰,要麼答案錯誤。如果* I *真的需要使用包含模型::讀取和查找(第一)不是一個好的解決方案,那麼這將是一個毫無價值的搜索結果。 – 2011-06-02 20:36:10

+0

解釋我的上述評論 - 這是對作爲作者的問題的正確答案 – 2011-06-02 20:47:00

+0

是的,我所需要的只是將數據移至視圖。對不起,我沒有正確表達這個問題。現在已經修好了,謝謝Carlos – Gustavo 2011-06-03 04:18:39

3

我相信你可以設置的行爲,使之適用於read(),但你也可以使用find('first')如果數據是所有你需要:

$this->T->find('first', array (
    'conditions' => array(
     'T.id' => $id 
    ), 
    'contain' => array (
     'C', 
     'L' => array (
      'fields' => array ('L.id, L.time'), 
      'I' => array (
       'fields' => array ('I.id','I.time'), 
       'J.name', 
       'J.id' 
      ) 
     ) 
    ) 
); 
+0

find('first',...)起作用。謝謝! – Gustavo 2011-06-01 19:24:06

+1

我很困惑你爲什麼接受這個,問題是「..使用read()方法的可用行爲」 - 這不是使用read()方法。 – Dunhamzzz 2011-06-02 12:36:36

+0

它解決了他(底層)的問題。 – JJJ 2011-06-02 14:04:53