Проверка доктрины 2

У меня проблема с проверкой. В Doctrine 1 я использовал это:

if ($model->isValid()) {
    $model->save();
} else {
    $errorStack = $model->getErrorStack();
    ...
}

, а в $ errorStack я получил имя столбца и сообщение об ошибке. Но в Doctrine 2 я могу использовать только это:

Entity

/**
 * @PrePersist @PreUpdate
 */
public function validate()
{
    if ($this->name == null)) {
        throw new \Exception("Name can't be null"); 
    }
}

Контроллер:

try {
    $user = new \User();
    //$user->setName('name');
    $user->setCity('London');
    $this->_entityManager->persist($user); 
    $this->_entityManager->flush();
} catch(Exception $e) {
    error_log($e->getMessage());
} 

, но у меня с ним две проблемы:

  • я не знаю, какой столбец?
  • Я не хочу проверять уникальность вручную

Если я пропущу validate () из объекта, уникальное будет обнаружено (из этого error.log)

Unique violation: 7 ERROR:  duplicate key value violates unique constraint "person_email_uniq"

, но, например, пользователь сохранит 2 записи, и первая будет неверно, но вторая действительна, после первого сохранения EntityManager закроется, и я не могу сохранить вторую (хорошую) запись из-за того, что «EntityManager закрыт».

Какое лучшее решение этой проблемы?

6
задан Robertoq 21 May 2011 в 15:51
поделиться