Xin chào tôi có ba thực thể Doctrine2 trong ứng dụng Symfony2 của tôi: hai ("Promo" và "PromoPeriod") trong gói Acme: PromoBundle; một ("Shop") trong gói Acme: ShopBundle. Các mối quan hệ là: Quảng cáo - PromoPeriod: Nhiều người một-một-. PromoPeriod - Shop: One-to-Many.Truy vấn Doctrine2 với lựa chọn trên nhiều thực thể từ các gói Symfony2 khác nhau
Trong kho của đối tượng "Promo", tôi cố gắng để có được tất cả các quảng cáo và các cửa hàng như sau:
return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
nơi: p.period là mối quan hệ giữa p dụ Promo và giai đoạn PromoPeriod ; pp.shops là mối quan hệ giữa PromoPeriod Trang và các cửa hàng. Các lỗi sau đây được trả về:
An exception has been thrown during the rendering of a template
("The parent object of entity result with alias 's' was not found.
The parent alias is 'pp'.")
Vì vậy, tôi cho rằng học thuyết là không có khả năng hiểu các loại "s" (mà là một thực thể Shop), vì nó nằm trong gói khác. Do đó, tôi đã cố gắng thêm mệnh đề INSTANCE OF:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
Và một lần nữa không có gì. Có lẽ đây không phải là cách để giải quyết vấn đề.
Bất kỳ ý tưởng nào?
Nếu bạn sử dụng FQCN thì sao? –
Tôi nên sử dụng FQCN như thế nào? Hãy nhớ rằng trong truy vấn SQL Doctrine2 được xây dựng theo một cách khác, vì Doctrine2 là một ORM. – JeanValjean
Mmm, mmm, FQCN = Tên lớp hoàn toàn đủ điều kiện, cách bạn chọn Thực thể đang sử dụng một bí danh Doctrine2 (AcmePromoBundle). Bí danh được sử dụng để tắt tên thực thể trong khi viết truy vấn, nó được ánh xạ trực tiếp đến không gian tên thực. Tôi yêu cầu bạn thử sử dụng FQCN để kiểm tra xem đó có phải là vấn đề bí danh hay không. Việc chọn FQCN sẽ hoạt động trong bất kỳ phần nào của ứng dụng của bạn. –