1
我有兩個實體:Image
和Tags
,具有多對多關係。有關相關實體字段的where子句的原則查詢buider
Image
有一些領域:code
,description
,author
和tags
它實現了許多一對多的關係。
Tag
只有兩個字段:name
和images
。
我建立一個非常通用的搜索形式,只是一個輸入字段,你可以寫任何文字,然後將返回有文本在其code
,description
或author
領域,或以任何的任何Image
其標籤name
字段。
對於非關係字段很容易。我在我的控制器(query
是用於搜索只是去GET參數):
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('MyBundle:Image')->createQueryBuilder('i');
$qb
->where(
$qb->expr()->like('i.code', $qb->expr()->literal('%'.$request->get('query').'%'))
)
->orWhere(
$qb->expr()->like('i.description', $qb->expr()->literal('%'.$request->get('query').'%'))
)
->orWhere(
$qb->expr()->like('i.author', $qb->expr()->literal('%'.$request->get('query').'%'))
);
現在,我不知道如何着手爲tags
的每個name
場。
我曾嘗試在Image
實體中使用虛擬字段,該實體將所有標記作爲字符串返回,但稍後在查詢生成器中不能使用它。
非常感謝!
+1。感謝您的回答。這種方式有效。但我會主張使用查詢生成器而不是DQL。我認爲一個好的ORM應該鼓勵以面向對象的方式工作。如果沒有人提出查詢構建器的替代方案,我會將您的答案設置爲正確的。 –
我檢測到它有問題。使用這種方式,搜索時不考慮沒有標籤的圖像。 –
然後應該有LEFT JOIN。 – nikita2206