在插入Doctrine之前,检查数据库中是否已存在实体

nev*_*ame 2 doctrine unique-constraint

每当我插入已存在于数据库中的实体时,我都会收到错误,因为其中一个字段(email)存在唯一约束.

所以我想检查它是否已经存在; 如果没有,我插入它.

我的代码看起来像这样:

$q = Doctrine_Query::create()
    ->from('User u')
    ->where('u.email = ?', $email);

$object = $q->fetchOne();

if( ! is_object($object)) {
          $user = new User();
          $user-email = $email;
          $user->save();
    }
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

ric*_*age 8

将您拥有的代码放入UserTable类的方法中,例如insertIfNotExists():

public function insertIfNotExists(User $user)
{
  // Check if it exists first
  $q = self::create("u")
    ->where("u.email = ?", $user->email)
    ->execute();

  // Do we have any?
  if ($q->count())
  {
    // Yes, return the existing one
    return $q->getFirst();
  }

  // No, save and return the newly created one
  $user->save();
  return $user;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以调用该方法,返回的对象将是现有记录(如果有的话),或者您刚刚创建的记录.