2012-09-04 9 views
5

मेरे पास 3 सरल सारणी हैं: उपयोगकर्ता, भूमिका, user_x_role कई से कई संबंधों के साथ। मेरे पास 2 इकाइयां हैं: उपयोगकर्ता और भूमिका। उपयोगकर्ता इकाई में संबंध एनोटेशन के साथ $ userRoles संपत्ति है। नियंत्रक में मुझे सभी उपयोगकर्ताओं को विशिष्ट भूमिका के साथ लाने की आवश्यकता है। लेकिन मुझे नहीं पता कि नियंत्रक में जॉइन का उपयोग कैसे करें। वर्तमान गलत कोड:सिम्फनी 2 में जॉइन मानदंडों के साथ खोजें

$role = $this->getDoctrine()->getRepository('TestBackEndBundle:Role'); 
$roles = $role->findBy(array('name' => 'ROLE_PARTNER')); 

$user = $this->getDoctrine()->getRepository('TestBackEndBundle:User'); 
$partners = $user->findBy(array('userRoles' => $roles)); 

यह "अपरिभाषित अनुक्रमणिका: शामिल कॉलम ..." में फेंकता है। लेकिन मैं उपयोगकर्ता इकाई में कॉलम में शामिल हो गया हूं:

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="user_x_role", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")} 
*) 
* @var ArrayCollection 
*/ 
protected $userRoles; 

उत्तर

12

आईएमओ इसके लिए सबसे अच्छा तरीका उपयोगकर्ता इकाई के लिए अपना स्वयं का भंडार बना रहा है। फिर उस भंडार में "getUsersByRole" जैसी विधि बनाएं, जहां आप क्वेरी बिल्डर के साथ इच्छित क्वेरी बनाते हैं।

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('u') 
    ->from('\namespace\for\User', 'u') 
    ->join('u.roles', 'r') 
    ->where(...) 

return $qb->getQuery()->getResult(); 
संबंधित मुद्दे