alanlarını içerir. Aşağıdaki DB tablolarım var: öğeler, kullanıcılar, gruplar, itemImages. (öğeler, gruplar) ve (kullanıcılar, gruplar) ve (öğeler, öğeler içindekiler) arasında bir çok arasında çok fazla ilişki vardır. Uygun tüm yabancı anahtarlar CakePHP'de dernekler olarak kuruldu.CakePHP 3,
Belirli bir kimliğe sahip bir kullanıcıya ana grup olarak atanmış bir gruptaki tüm öğeleri ve ana görüntülerini seçen içerme() ile bir sorguyu nasıl oluşturabilirim? Şimdilik var
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'nin kodu:
$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']);
Evet, son gerekli değildi içeren - tüm veriler alre edildi _matchingData içinde eşleşen() işlevlerinden ady. Benim en büyük sorum, sonucu doğru bir şekilde "düzleştirmek" idi. Bu şekilde() seçtiğimde, bana "_matchingData" anahtarının altında bir alt nesne olarak URL'yi verir ve diğer değerlerle aynı düzeyde olmasını isterim. Bir geçici çözüm olarak yaptığım şey json_encode -> all "_matchingData." dize aralıkları -> json_decode. – user1507558
'distinct' ifadesine yapılan yorum çok faydalıdır. –