我想用查詢生成器編寫一個複雜的查詢,我需要幫助(我是一個完整的noob在連接查詢)情況是這樣的,我有一個國家的表, country_id關係以及帶有hotel_id關係的促銷活動。使用查詢生成器複雜的連接查詢
所以酒店有國家,而且促銷有酒店。現在我需要找到屬於一組國家的所有促銷活動。爲此,我需要檢查他們所屬的酒店是否在這些國家。
無論如何,有人可以幫助我建立與查詢生成器的查詢?我也會接受mysql查詢。
我想用查詢生成器編寫一個複雜的查詢,我需要幫助(我是一個完整的noob在連接查詢)情況是這樣的,我有一個國家的表, country_id關係以及帶有hotel_id關係的促銷活動。使用查詢生成器複雜的連接查詢
所以酒店有國家,而且促銷有酒店。現在我需要找到屬於一組國家的所有促銷活動。爲此,我需要檢查他們所屬的酒店是否在這些國家。
無論如何,有人可以幫助我建立與查詢生成器的查詢?我也會接受mysql查詢。
假設你已經設置你的關係在你的實體@OneToMany
和@ManyToOne
,你已經填充所需主義集合或國家編號的陣列到$countries
:
$result = $this->getDoctrine()->getManager()->createQueryBuilder()
->select('c, h, p')
->from('AcmeBundle:Promotion', 'p')
->innerJoin('p.hotels', 'h')
->innerJoin('h.country', 'c')
->where('c IN (:countries)')
->setParameter('countries', $countries)
->getQuery()
->getResult();
產生的SQL最終會被類似的東西來:
SELECT c.*, h.*, p.* FROM promotions p
INNER JOIN hotels h ON p.hotel_id = h.id
INNER JOIN country c ON h.country_id = c.id
WHERE c.id IN (?)
注意這個查詢不會不恰當地定義你的學說實體合作。既然你沒有提供你的實體配置,我不得不用假設回答你的問題。 Here's some more information on setting up your Database with Doctrine,特別是Entity Relationship mapping
我的關係是多方合一的方式。所以酒店與國家有多對一的關係,促銷活動與酒店有多對一的關係,但我沒有其他方式的關係。因此,酒店不知道他們的促銷活動是誰,並且國家不知道有哪些酒店, – 2014-11-22 16:29:26
@JoeYahchouchi您需要讓他們雙向的。 – sjagr 2014-11-22 19:59:05
我現在很聰明,並意識到你的答案是現貨;) – 2016-02-17 09:40:47
您需要屬於集合中的所有國家或集合中任何國家/地區的所有國家/地區的促銷活動嗎? – Quassnoi 2014-11-21 16:09:45