2012-09-04 36 views
5

Tôi có 3 bảng đơn giản: người dùng, vai trò, user_x_role với quan hệ Nhiều-Nhiều. Tôi có 2 thực thể: Người dùng và Vai trò. Thực thể người dùng có thuộc tính $ userRoles với chú thích quan hệ. Trong Controller tôi cần lấy tất cả người dùng với vai trò cụ thể. Nhưng tôi không biết cách sử dụng JOIN trong controller. Mã lỗi hiện tại:findBy với tiêu chí JOIN trong Symfony2

$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)); 

Nó thows "Undefined index: joinColumns in ...". Nhưng tôi có joinColumns trong thực thể Người dùng:

/** 
* @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; 

Trả lời

12

IMO cách tốt nhất để tạo kho lưu trữ của riêng bạn cho thực thể Người dùng. Sau đó, trong kho lưu trữ tạo phương thức như "getUsersByRole" nơi bạn thực hiện truy vấn bạn muốn với trình tạo truy vấn.

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

return $qb->getQuery()->getResult(); 
Các vấn đề liên quan