Có ai biết cách truy xuất số đếm dựa trên điều kiện trong câu lệnh chọn Query() của Doctrine 2 không?Học thuyết 2: Đếm các mục bằng cách nhập vào Chọn
Đây là những gì tôi đã thử cho đến nay ...
Lần thử đầu tiên của tôi là thử đếm() với eq(). Các lỗi tôi nhận được nói "Dự kiến đóng ngoặc đơn, có bằng."
$qb->select($qb->expr()->count($qb->expr()->eq('t.id', '1')))
Tiếp theo tôi đã thử đếm() bằng(). Lỗi tôi nhận được nói "Đã đạt đến mức lồng hàm tối đa."
$qb->select($qb->expr()->count($qb->having('t.id', '1')))
Sau đó, tôi đã thử đếm() với vị trí() và eq(). Một lần nữa, tôi đã đạt được "Mức lồng hàm tối đa."
$qb->select($qb->expr()->count($qb->where($qb->expr()->eq('t.id', '1'))))
Sau đó, tôi đã thử các biến thể này bằng cách sử dụng trong(). Cả hai đều cung cấp cho các lỗi cú pháp "mong đợi từ, có ví dụ '('
$qb->select($qb->expr()->count($qb->expr()->in('t.id', array(1))))
$qb->select($qb->expr()->count($qb->expr()->in('t.id', 1)))
Đối với trong(), tôi cũng đã cố gắng đi trong giá trị như là một biến và qua setParameter(), với kết quả tương tự.
Dưới đây là tương đương với MySQL về những gì tôi đang cố gắng để mã trong QueryBuilder:
SELECT
SUM(IF(type.id = 1, 1, 0)) AS 'fords',
SUM(IF(type.id = 2, 1, 0)) AS 'hondas'
FROM item
JOIN type ON item.type_id = type.id
Đừng quên, mà bạn có thể sử dụng Truy vấn gốc. Đôi khi nó nhanh hơn và thanh lịch hơn. –