【问题标题】:Complex doctrine query form validation help!复杂的学说查询表单验证帮助!
【发布时间】:2010-11-29 17:45:24
【问题描述】:

我正在尝试检查表单验证中是否不存在跨五列的条目组合(我有 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'])

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

【问题讨论】:

    标签: doctrine symfony-1.4


    【解决方案1】:

    怎么样...

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

    【讨论】:

    • 谢谢汤姆 - 我写了另一个函数来验证答案没有重复并且工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多