2016-08-18 90 views
0

何做遞歸CakePHP中3.X得到第三關聯表的數據在CakePHP中3.X

我有4個表

users 

---------- 
|id|name | 
|1 | mick| 
---------- 

responses 
------------------------- 
id|question_id| response| 
1 |  1 | slim | 
------------------------- 

questions 
------------------ 
id | question | 
1 | body type | 
------------------- 

user_respopnses 
---------------------------------------------- 
id | user_id | question_id | response_id | 
1 | 1  | 1   | 1  | 
---------------------------------------------- 

下面的查詢是由CakePHP的自動生成獲取數據

通過上述查詢運行
$users = $this->Users->get($id, [ 
    'contain' => ['Responses' ]  
    ]); 

響應

Id Question Id  Response   Actions 
1  1    slim  View Edit Delete 

我需要顯示問題屬性(文本)而不是問題ID,但卡住了。在用戶表中定義

關係

$this->table('users'); 
    $this->displayField('id'); 
    $this->primaryKey('id'); 
    $this->addBehavior('Timestamp'); 

    $this->belongsToMany('Responses', [ 
     'foreignKey' => 'user_id', 
     'targetForeignKey' => 'response_id', 
     'joinTable' => 'users_responses' 
    ]); 
} 

調試後,我得到這個數據

'responses' => [ 
     (int) 0 => object(App\Model\Entity\Response) { 

      'id' => (int) 1, 
      'question_id' => (int) 1, 
      'response' => 'slim', 
      '_joinData' => object(Cake\ORM\Entity) { 

       'response_id' => (int) 1, 
       'id' => (int) 1, 
       'user_id' => (int) 1, 
       'question_id' => (int) 1, 
       '[new]' => false, 
       '[accessible]' => [ 
        '*' => true 
       ], 
       '[dirty]' => [], 
       '[original]' => [], 
       '[virtual]' => [], 
       '[errors]' => [], 
       '[invalid]' => [], 
       '[repository]' => 'UsersResponses' 

      }, 

實際上,用戶已經響應表,並問表沒有關聯,但是我們可以從讓他們的關係第三個表「users_responses」,因爲此表具有question_id,user_id,reponse_id。但cakephp 3.x不允許遞歸。現在只查詢命中響應表和users_response表。任何建議或暗示解決這個問題非常值得讚賞。

下面的SQL查詢來實現的結果我想要的(我用user_ID的,因爲它在運行mysqlyog = 4的靜態值)

SELECT users.id , questions.question, responses.response 
FROM questions, responses, users_responses , users 
WHERE 
users.id = 4 AND 

    users_responses.user_id = 4 AND users_responses.response_id = responses.id 
    AND 
    users_responses.question_id = responses.question_id 

    AND 
    responses.question_id = questions.id; 
+0

這個數據庫設計將存儲問題和答案,用戶可以爲自己選擇正確的答案並保存在「users_responses」中。這些表是用於交友網站。 – coder

回答

0

「遞歸」是不太合適的詞在這裏,但你要的是

$users = $this->Users->get($id, [ 
    'contain' => ['Responses' => ['Questions']]  
]); 

這在手動的Eager Loading Associations部相當清楚的描述。

+0

謝謝。它解決了 – coder