复杂的学说查询表单验证帮助!

时间:2010-11-29 17:45:25

标签: doctrine symfony-1.4

我正在尝试检查五个列中的条目组合(我有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'])

......等等。 可能不是最有效的方法,但是如果其中一个值匹配数据库中已有的任何列,则无论是抛出错误,它都不会检查实际的组合...... 任何帮助将非常感谢!

1 个答案:

答案 0 :(得分: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',则查询将给出错误匹配。也许其他人可以改进那个。也可能是一个缓慢的查询。