我需要檢查表中是否存在多個項目。問題是我必須檢查兩個字段連接成字符串的字符串,如果我想一起檢查名字和姓氏,但單獨存儲它們。我是新來的學說,並在主題廣泛的研究之後,我嘗試了兩種方式:Doctrine DQL(Symfony2) - WHERE級聯字段是IN params
$params = array('two words', 'another here');
// writing the DQL
$query = $this->getEntityManager()
->createQuery("
SELECT foo.f1, foo.f2
FROM MyCompanyMyBundle:MyEntity foo
WHERE CONCAT(CONCAT(foo.f1, ' '), foo.f2) IN (:params)
")->setParameter('params', implode(', ', $params));
注意:雙CONCAT需要becouse CONCAT_WS不主義的支持。
這應該工作(imo)但是:params被替換爲一個 string('two words,another here'),不是由逗號分隔的一系列字符串。 (我試過在$ params中的元素周圍單獨引用單引號,但這也不起作用,它被Docrine('\'兩個單詞'','另一個這裏'))所逃脫。
// trying the query builder
$qb = $this->createQueryBuilder('foo');
$query = $qb
->select(array('foo.f1', 'foo.f2'))
->where(
$qb->expr()->in(
$qb->expr()->concat($qb->expr()->concat('foo.f1', ' '), 'foo.f2'),
':params'
)
)
->setParameter('params', implode(', ', $params))
->getQuery();
我猜我甚至沒有接近查詢生成器,所以如果這是要走的路我欣賞任何幫助!
所以我的目標是返回兩列值正確在一起的行。
哪一條路要走,我做錯了什麼?
當使用'的setParameter()'上的一個參數的' IN(...)'子句中,您應該直接傳遞數組 - 'setParameter('params',$ params)'。這可能會或可能無法解決您的問題。 – Jez
它的工作原理!如果你把它作爲答案發布,我很樂意接受它。謝謝! – hattila
認爲會有更多,但我一定會發表一個答案。謝謝。 – Jez