यह एक प्राथमिक अनुरोध की तरह प्रतीत हो सकता है, लेकिन मुझे इसे काम करने के लिए प्रतीत नहीं होता है, इसलिए मुझे या तो बेवकूफ कुछ याद आ रहा है, या यह समझ में नहीं आता कि यह कैसे किया जाना चाहिए। अग्रिम में धन्यवाद।सिद्धांत 2.1 डीक्यूएल - कई से कई क्वेरी एकाधिक मान - एकाधिक श्रेणियों में आइटम?
मेरे पास दो से अधिक संबंधों के साथ दो सिद्धांत संस्थाएं हैं: आइटम और श्रेणियां। जो item_has_categories द्वारा शामिल होते हैं।
/**
* Item
*
* @Table(name="items")
* @Entity(repositoryClass="Entity\Repository\Item")
*/
class Item
{
....
/**
* @var Categories
*
* @ManyToMany(targetEntity="Categorie", inversedBy="items", cascade={"persist"})
* @JoinTable(name="items_has_categories",
* joinColumns={
* @JoinColumn(name="items_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(name="categories_id", referencedColumnName="id")
* }
*)
*/
private $categories;
....
}
/**
* Categorie
*
* @Table(name="categories")
* @Entity(repositoryClass="Entity\Repository\Categorie")
*/
class Categorie
{
.....
/**
* @var Items
*
* @ManyToMany(targetEntity="Item", mappedBy="categories")
*/
private $items;
....
}
और मैं क्या करने की कोशिश कर रहा हूँ सभी आइटम है कि सभी की श्रेणियों में से "x" संख्या में हैं वापस जाने के लिए एक प्रश्न चलाया जाता है - जो मुझे लगता है/सोचा एक चयन के साथ और और खंड होना चाहिए:
class Item extends EntityRepository
{
public function findItemsByCategories($categories)
{
$qString = 'SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE';
$i = 0;
foreach ($categories as $c)
{
$qString .= ' c.name = ?' . $i;
if ($i < (count($categories)-1))
{
$qString .= ' AND';
}
$i++;
}
$query = $this->_em->createQuery($qString);
$query->setParameters($categories);
return $query->getResult();
}
कोड का छोटा सा कोई त्रुटि नहीं है और निम्नलिखित DQL चयन करें क्वेरी (जब 2 श्रेणियों सरणी में भेजा जाता है: $ श्रेणियों): बाहर थूक कि
SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE c.name = ?0 AND c.name = ?1
यह हमेशा एक खाली सरणी लौटा रहा है , यानी, कोई परिणाम नहीं रों। हालांकि मेरे डीबी में, मानदंडों को फिट करने के 20 से अधिक आइटम हैं: दोनों श्रेणियों में हैं।
कोई भी देखता है कि मैं यहां क्या कर रहा हूं? क्या यह एक और चयन होना चाहिए ...? असल में मैं सिर्फ यह जानना चाहता हूं कि डॉक्टर 2+ में कई से अधिक रिश्तों को कैसे पूछना है, जहां एक से अधिक मान हैं जिन्हें पूरा किया जाना चाहिए ...
अपना पता साझा करने के लिए धन्यवाद। मैं एक बहुत ही समान मुद्दे पर छोड़ने वाला था, लेकिन सदस्य ने चाल की थी। आप के लिए सबसे अच्छा –
अंत में ऐसा करने का एक अच्छा तरीका है। वास्तव में सदस्य अधिक दस्तावेज होना चाहिए। यह भी पता नहीं था कि यह अस्तित्व में था। बहुत बहुत धन्यवाद। – ZolaKt
मेरे प्रयोगों से, यह विधि एकाधिक उप-प्रश्नों को चलाने के लिए कारण बन जाएगी। यदि डीक्यूएल इसे स्वीकार करता है, तो आप उप-क्वेरी और WHERE क्लॉज के साथ बहुत बेहतर होंगे जो IN() का उपयोग करता है। अगर मैं अभी भी डीक्यूएल में काम करता हूं तो मैं प्रयोग करूँगा और उत्तर पोस्ट करूंगा। – Lewis