मेरे पास निम्नलिखित डीबी टेबल हैं: आइटम, उपयोगकर्ता, समूह, आइटम इमेज। (आइटम, समूह) और (उपयोगकर्ता, समूह), और वस्तुओं (आइटम, आइटम) के बीच कई लोगों के बीच कई संबंध हैं। केकपीएचपी में एसोसिएशन के रूप में सभी उचित विदेशी कुंजी स्थापित की गई हैं।केकपीएचपी 3 में चयनित फ़ील्ड हैं
मैं() के साथ एक क्वेरी कैसे बना सकता हूं जिसमें सभी आइटम और उनकी मुख्य छवि का चयन किया जाता है, जो एक समूह में हैं जो एक विशेष आईडी वाले उपयोगकर्ता को मुख्य समूह के रूप में असाइन किया गया है?
SELECT items.id AS itemId, items.name, itemImages.url AS itemUrl
FROM items
INNER JOIN groups_items ON groups_items.item_id = items.id
INNER JOIN groups ON groups_images.group_id = groups.id
INNER JOIN groups_users ON groups_users.group_id = groups.id
INNER JOIN users ON groups_users.user_id = users.id
INNER JOIN itemImages ON itemImages.item_id = items.id
WHERE groups_users.isMainGroup = 1
AND users.id = :userId
AND itemImages.isMainImage = 1
CakePHP कोड मैं अब के लिए है:
$items = $this->Items->find()
->hydrate(false)
->contain([
'Groups.Users' => function($q) use ($userId){
return $q->where(['isMainGroup' => 1, 'Users.id' => $userId]);
},
'ItemImages' => function($q){
return $q->where(['isMainImage' => 1]);
},
]);
//->select(['itemId' => 'Items.id', 'Items.name', 'itemUrl' => 'itemImages.url']);
हाँ, पिछले की जरूरत नहीं था होते हैं - सभी डेटा alre गया था मेलिंग() फ़ंक्शंस से _matchingData में ady। मेरा बड़ा सवाल यह था कि परिणाम को "फ़्लैट" कैसे करें। जब मैं() की तरह चयन करता हूं, तो यह मुझे "_matchingData" कुंजी के तहत उपरोक्त के रूप में यूआरएल देता है, और मैं इसे अन्य मानों के समान स्तर पर रखना चाहता हूं। मैंने वर्कअराउंड के रूप में क्या किया था json_encode -> सभी "_matchingData" को हटा दें। स्ट्रिंग घटनाएं -> json_decode। – user1507558
'विशिष्ट 'कथन पर टिप्पणी बहुत उपयोगी है। –