何做遞歸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;
這個數據庫設計將存儲問題和答案,用戶可以爲自己選擇正確的答案並保存在「users_responses」中。這些表是用於交友網站。 – coder