में जॉइन का उपयोग करके मुझे क्वेरीब्यूल्डर या डीक्यूएल का उपयोग करने की कोशिश करते समय कोई समस्या है।सिम्फनी 2/डॉक्टर एसक्यूएल
मैं निम्नलिखित संबंध है:
उपयोगकर्ता < -1: n-> प्रोफाइल < -n: m-> RouteGroup < -1: n-> मार्ग
मैं एक DQL करना चाहते हैं जो उन सभी मार्गों को सूचीबद्ध करता है जिन पर एक विशिष्ट उपयोगकर्ता का उपयोग होता है। मैं निम्नलिखित कोड के साथ इस बारे में जानकारी प्राप्त कर सकते हैं:
$usr = $this->container->get('security.context')->getToken()->getUser();
foreach ($usr->getProfiles() as $profile){
foreach ($profile->getRoutegroups() as $routegroup){
var_dump($routegroup->getRoutes()->toArray());
}
}
स्पष्ट कारण मैं नहीं कर सकते इस कोड का उपयोग के लिए, अन्यथा मैं अपने सर्वर ओवरलोड जाएगा, LOL।
मैं निम्नलिखित दृष्टिकोण की कोशिश की:
DQL:
$em->createQuery('SELECT p FROM CRMCoreBundle:User u
JOIN CRMCoreBundle:Profile p
JOIN CRMCoreBundle:RoleGroup rg
JOIN CRMCoreBundle:Role r
WHERE
u.id=:user')
->setParameter('user', $user->getId())
->getResult();
QueryBuilder (i u.profiles उपयोग करने की कोशिश - इकाई के बजाय रिश्ते का नाम है - लेकिन यह भी काम नहीं किया):
$em->createQueryBuilder()
->select('r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','p')
->where('u.id = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
क्या कोई मदद कर सकता है ???
अद्यतन: मैं Zeljko के समाधान की कोशिश की और इस स्क्रिप्ट बनाया:
return $this->getEntityManager()
->createQueryBuilder()
->select('u, r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','p')
->innerJoin('p.routegroups','rg')
->innerJoin('rg.routes','r')
->where('u.id = :user_id')->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
लेकिन मैं यह त्रुटि आई:
The parent object of entity result with alias 'r' was not found. The parent alias is 'rg'.
तो मैं बदल "-> का चयन करें ('यू, आर'
[Semantical Error] line 0, col -1 near 'SELECT r FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
अपने अपडेट का जवाब देने के लिए, आप केवल यू और आर का चयन नहीं कर सकते .. आर के रास्ते में सब कुछ भी चुना जाना है। तो आपको चुनने की जरूरत है ('यू, पी, आरजी, आर') – intrepion