2013-08-21 42 views
7

Tôi có hai thực thể được kết nối thông qua mối quan hệ 1: 1, ví dụ: MyEntity.idRelatedEntity Tôi muốn tạo một truy vấn Doctrine nơi tôi có thể lấy dữ liệu từ MyEntity tùy thuộc vào giá trị từ một cột nhất định trong RelatedEntity. Một cái gì đó như thế này (nó không hoạt động tất nhiên):Làm cách nào để thực hiện truy vấn tham gia bằng Symfony và Doctrine Query Builder

$entity = $em 
    ->getRepository('MyBundle:RelatedEntity') 
    ->createQueryBuilder('e') 
    ->leftJoin('MyBundle:RelatedEntity', 'r') 
    ->where('r.foo = 1') 
    ->getQuery() 
    ->getResult(); 

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao :)

+0

Bạn đang viết truy vấn này ở đâu? Nó sẽ giúp tôi trả lời câu hỏi của bạn và cải thiện mã của bạn. là trong 'MyEntityRepository'? –

Trả lời

15
$entity = $em 
    ->getRepository('MyBundle:MyEntity') 
    ->createQueryBuilder('e') 
    ->join('e.idRelatedEntity', 'r') 
    ->where('r.foo = 1') 
    ->getQuery() 
    ->getResult(); 

Ngoài ra còn tham gia làm cho không có ý nghĩa ở đây (vì mệnh đề where mà sẽ làm cho nó hoạt động như bên tham gia)

+0

Tuyệt vời! Cảm ơn bạn! Chỉ cần chỉnh sửa nhỏ, bạn đã bỏ lỡ phần id bên trong tham gia. Nó nên đọc '-> join ('e.idRelatedEntity', 'r')' – viarnes

12

Lưu ý rằng bạn nên viết truy vấn này trong thư mục MyEntityRepository

public function getMyEntityWithRelatedEntity($parameter) 
{ 
    $query = $this->createQueryBuilder('e') 
     ->leftJoin('e.relatedEntity', 'r') 
     ->where('r.foo = :parameter') 
     ->setParameter('parameter', $parameter) 
     ->getQuery(); 

    return $query->getResult(); 
} 

Và sau đó sử dụng nó trong bộ điều khiển/dịch vụ của bạn:

$manager = $this->getDoctrine()->getManager(); 
$results = $manager->getRepository('MyBundle:MyEntity')->getMyEntityWithRelatedEntity(1); 
+0

Đẹp nhất (và sạch hơn). Sẽ tính đến lần sau. Bây giờ tôi đang sử dụng câu trả lời @Uriziel :) Cảm ơn bạn! – viarnes

Các vấn đề liên quan