2012-12-13 39 views
10

Lưu ý: Đây là một hạn chế ORM reported on the project's issue trackerDoctrine2: Arbitrary tham gia và đơn bảng thừa kế

Tôi đang phải đối mặt với một vấn đề xây dựng một DQL truy vấn bằng cách sử dụng tham gia cú pháp tùy tiện giới thiệu trong thuyết 2.3 trên một lớp thực thể đó là gốc của một hệ thống phân cấp.

Với những lớp:

A - không thừa kế

B1 - trừu tượng, thư mục gốc của một hệ thống phân cấp, cột phân biệt được đặt tên là 'loại'

tôi thiết lập một nhà xây dựng truy vấn như này:

$qb->select('a.id AS idA, b.id AS idB') 
    ->from('\Entity\A', 'a') 
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); 

Và học thuyết SQL tạo ra là một cái gì đó như thế này:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') 

Những vấn đề đó là nơi làm cho trái tham gia vô dụng.

Có cách nào để buộc điều kiện trên cột phân biệt đối xử được đặt trong kết nối không? Ít nhất điều đó sẽ làm cho nó ...

Tôi có nên điền vào báo cáo lỗi không?

Trả lời

-1

Bạn đã thử tham gia bên trong thay vì tham gia trái? Truy vấn mà bạn cần có thể là

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b 
       ON (a.something = b.something) 
WHERE b.type IN ('1', '2', '3') 

Bạn có thể thay đổi hàm đó thành leftJoin bằng cách tham gia hoặc tạo truy vấn bằng phương thức createQuery cho truy vấn hải quan.

+0

Vâng, tôi muốn lấy tất cả các yếu tố A, ngay cả những người không có bất kỳ B vì vậy một bên tham gia sẽ không giúp đỡ. Trên thực tế, hành vi hiện tại cũng giống như tôi đã sử dụng một phép nối bên trong vì điều kiện nơi trên cột b.type. – Jay

-1

thử này

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b ON (a.something = b.something) and b.type IN ('1', '2', '3') 
Các vấn đề liên quan