基本上我想作出這樣的查詢:Symfony2的原則 - 凡作爲對
SELECT * FROM `table` WHERE (`c1`,`c2`) in (('a','b'),('c','d'))
我嘗試了一些事情,但我找不到任何建議如何實現這一目標。我嘗試了一些類似的東西:
foreach ($pairs as $pair) {
$columns[] = "(" . $pair->getc1() . "," . $pair->getc2() . ")";
}
$query = $this->entityManager->getRepository('AcmeTestBundle:Combinations')->createQueryBuilder('c')
->select()
->where('(c.c1,c.c2) in (:pairs)')
->setParameter('pairs', $columns)
->getQuery();
這顯然並沒有爲我工作,你有什麼想法如何在where in
語句中使用多個值嗎?
編輯:
我設法做這種噁心的方式。我懷疑這是最好的方式,我仍然認爲應該有更好的解決方案,所以我很樂意看到它。
$query = $this->entityManager
->getRepository('AcmeTestBundle:Combinations')
->createQueryBuilder('c')
->select();
$expr = $query->expr();
$i = 1;
foreach ($pairs as $pair) {
$query = $query->orWhere($expr->andX($expr->eq('c.c1', ':c1' . $i), $expr->eq('c.c2', ':c2' . $i)))
->setParameter('c1' . $i, $pair->getc1())
->setParameter('c2' . $i, $pair->getc2())
;
$i++;
}
$query = $query->getQuery();
不幸的是,你不能有'WHERE(COL1,COL2)'教義......不過,我能想象的延伸,這將是在教義的自定義功能。它可能類似於'PAIRS((col1,col2),(val1_1,val2_1),(val1_2,val2_2),(val1_N,val2_N))',最終會轉變爲正常的原始sql。問題是驗證輸入會很棘手。 –
該死的:(謝謝你的信息,至少我不會再尋找這個 –
請檢查我的答案,也許它可以以某種方式爲你工作 –