2012-05-18 84 views
1

我有關於模型關聯的問題。考慮以下應用程序:每個月向用戶提出一個新問題。這些能夠給出這個問題的提示,而其他用戶有能力對這個提示做出反應。我的模型設置是這樣的:在兩張桌子上加入相同模型的蛋糕PHP

Users hasMany Tips, Reactions 

Tips belongsTo User 

Tips hasMany Reactions 

Reactions belongsTo User, Tip 

現在我想從所有用戶那裏獲得有關該問題的所有提示。我簡單地在提示表上找到所有提示,這些提示表返回給我的所有與他們的用戶和反應相關的提示。然而,這些反應並不包含用戶,這顯然非常重要。

Cake自動將我的查找全部轉換爲兩個查詢:一個在提示表上連接用戶,一個在反應表上,但用戶表中沒有連接,這正是我需要的。

所以我的問題是:爲什麼用戶表沒有加入反應,我該如何解決這個問題?

代碼:

用戶模型:

public $hasMany = array('Tip', 'Reaction'); 

提示模型:

public $hasMany = array('Reaction' => array(
     'foreignKey' => 'tip_id' 
    )); 

public $hasOne = array('User' => array(
     'fields' => array(
      'User.id, User.first_name, User.last_name' 
     ), 
     'foreignKey' => 'id' 
    )); 

反應模型:

public $belongsTo = array('Tip', 'ReactionUser' => array(
     'className' => 'User', 
     'foreignKey' => 'id' 
    )); 

控制器:

$tips = $this->Tip->find('all'); 

OUTPUT:

array(
    (int) 0 => array(
     'Tip' => array(
      'id' => '1', 
      'user_id' => '1', 
      'question_id' => '1', 
      'tip' => 'Testing da new datavbase', 
      'votes' => '0', 
      'approved' => '1', 
      'pic' => '', 
      'created' => '2012-05-18 09:22:56' 
     ), 
     'User' => array(
      'id' => '1', 
      'first_name' => 'Bart', 
      'last_name' => 'De Bock' 
     ), 
     'Reaction' => array(
      (int) 0 => array(
       'id' => '1', 
       'tip_id' => '1', 
       'user_id' => '1', 
       'reaction' => 'lorem ipsum', 
       'votes' => '0', 
       'approved' => '1', 
       'pic' => '', 
       'created' => '0000-00-00 00:00:00' 
      ) 
     ) 
    ), 
    (int) 1 => array(
     'Tip' => array(
      'id' => '2', 
      'user_id' => '2', 
      'question_id' => '1', 
      'tip' => 'Test', 
      'votes' => '0', 
      'approved' => '1', 
      'pic' => '', 
      'created' => '2012-05-18 10:22:51' 
     ), 
     'User' => array(
      'id' => '2', 
      'first_name' => 'Deborah', 
      'last_name' => 'Rochtus' 
     ), 
     'Reaction' => array(
      (int) 0 => array(
       'id' => '2', 
       'tip_id' => '2', 
       'user_id' => '3', 
       'reaction' => 'Say whaat?', 
       'votes' => '2', 
       'approved' => '1', 
       'pic' => '', 
       'created' => '2012-05-18 10:33:32' 
      ), 
      (int) 1 => array(
       'id' => '3', 
       'tip_id' => '2', 
       'user_id' => '4', 
       'reaction' => 'Hmmm..', 
       'votes' => '0', 
       'approved' => '1', 
       'pic' => '', 
       'created' => '2012-05-18 10:33:44' 
      ) 
     ) 
    ) 
) 

正如你所看到的,這些反應不包含關聯的用戶...

感謝您的幫助!

+0

讓我看看你的代碼,你試過什麼? –

+0

請告訴我你的控制器的完整代碼.... ur模態看起來很好.. –

+0

完成,更新超過 – baRToooo

回答

0

使用中可容納:

在AppModel:

public $uses = array('Containable');

更改您發現呼叫:

$this->Tip->find('all', array('contain' => array('User', 'Reaction' => array('User'))));

0

請試試這個

$tips = $this->Tip->find('all' array( 'recursive'=>'2' ) );

如您所需,遞歸值可能爲1,2,3,4等。