Symfony框架 - 检查数据库条目是否存在

时间:2011-03-04 11:21:51

标签: php symfony1 doctrine-inheritance

使用symfony框架,哪个代码最好查询数据库表以检查条目是否已存在?

我需要这样的查询:

$q = $this->createQuery('t')
    ->where('t.email = ?', $email)
    ->andWhere('t.type = ?','newsletter');

2 个答案:

答案 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')
);

我认为它比其他人容易得多。