使用symfony框架,哪个代码最好查询数据库表以检查条目是否已存在?
我需要这样的查询:
$q = $this->createQuery('t')
->where('t.email = ?', $email)
->andWhere('t.type = ?','newsletter');
答案 0 :(得分:3)
这是一种简单的方法,假设您在Doctrine_Table实例中,它看起来就是:
$this->findOneByEmail($email);
如果你使用具体的继承,你不应该需要type
,因为它将通过DQL回调添加(假设你已经启用它们),但为了完整性:
$this->findOneByEmailAndType($email, 'newsletter');
如果它存在,它们将返回Doctrine_Record,否则返回null。
您还可以对查询使用计数:
$exists = $this->createQuery('t')
->where('t.email = ?', $email)
->andWhere('t.type = ?','newsletter') // your probably don't need this
->count();
这将返回与查询匹配的记录数。这样效率更高,因为它不会使结果保持水平。
答案 1 :(得分:1)
试试这个,
您可以直接在表单类中定义。
$this->validatorSchema['email'] = new sfValidatorAnd(array(
new sfValidatorString(array('required' => true, 'trim' => true)),
new sfValidatorDoctrineUnique(array('model'=>'User','column'=>'email'),
array('invalid' =>'Email Address already exist')),
new sfValidatorRegex(
array('pattern' => '~^(\s)*[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})(\s)*$~i'),
array('invalid' => 'Please enter valid email ID'))),
array(),
array('required' =>'Please enter email ID')
);
我认为它比其他人容易得多。