2010-11-29 76 views
0

我想檢查跨五列的條目組合(我有parent1,parent2,parent3,parent4和parent5,它們都是整數)在我的表單驗證中不存在。 我試過了:複雜的教條查詢表單驗證幫助!

$query = Doctrine_Query::create() 
->select('m.id', 'm.name') -> from ('Mix m') 

->where('m.parent1=?', $values['parent1']) 

->orWhere('m.parent1=?', $values['parent2']) 

->orWhere('m.parent1=?', $values['parent3']) 

->orWhere('m.parent1=?', $values['parent4']) 

->orWhere('m.parent1=?', $values['parent5']) 

->andWhere('m.parent2=?', $values['parent1']) 

->orWhere('m.parent2=?', $values['parent2']) 

...等等。 可能不是最有效的方法,但無論是其中一個值是否與數據庫中已有的列中的任何一個相匹配,都會拋出錯誤,它不會檢查實際組合... 任何幫助將非常感謝!

回答

0

......怎麼

// Set of possible matches 
$set = array($values['parent1'], $values['parent2'], $values['parent3'], $values['parent4'], $values['parent5']); 

// Let's make it two-dimensional for simpler DQL syntax 
$sets = array($set, $set, $set, $set, $set); 

// Multiple WHERE IN AND 
$query = Doctrine_Query::create() 
->select('m.id', 'm.name') 
->from ('Mix m') 
->where('m.parent1 IN ? AND m.parent2 IN ? AND m.parent3 IN ? AND m.parent4 IN ? AND m.parent5 IN ?', $sets); 

WHERE IN AND應該確保每個值匹配。然而,至少有一個想到的失敗案例是,如果$ set中的多個值是相同的(例如'5,5,1,4,1'),則查詢會給出錯誤匹配。也許其他人可以改進這可能是一個緩慢的查詢以及

+0

謝謝湯姆 - 我寫了另一個函數來驗證答案不重複,它工作正常。 – Lauren 2010-12-07 19:18:22