Đây là một trong những tình huống mà Doctrine ORM có thể sẽ gây ra cho bạn nhiều vấn đề hơn là nó giải quyết được. Bạn có thể:
- Sử dụng truy vấn gốc
và
ResultSetMapping
có liên quan thiết lập - Cấu trúc lại truy vấn SQL của bạn thành một thứ gì đó mà Doctrine có thể xử lý trong DQL. Nhìn vào truy vấn bạn có, có một số cách khác nhau mà bạn có thể thực hiện (ví dụ:coi truy vấn con như một bảng tạm thời trong phần FROM / JOIN) nhưng tôi không thể thấy cách nào mà Doctrine DQL sẽ cho phép
- Chỉ cần sử dụng SQL đơn giản bằng Doctrine DBAL. Có vẻ như bạn đang sử dụng
$this->_em
điều này khiến tôi nghĩ rằng bạn đang ở trong mộtEntityRepository
, vì vậy bạn có thể làm:$this->_em->getConnection()
để nhận Kết nối DBAL sau đó chỉ cần thực hiện$conn->query()
. Rõ ràng theo cách này, bạn sẽ mất đi lợi ích của ORM (bất khả tri cơ sở dữ liệu, v.v.) nhưng bạn có thể coi ORM là có thuế thực hiện các truy vấn phức tạp.
Tôi hiểu không có điều nào trong số này là lý tưởng nhưng từ kinh nghiệm, đôi khi tốt hơn nên đẩy Doctrine ORM ra khỏi con đường để đạt được những gì bạn cần.