检查哪个列抛出UniqueConstraintViolationException

时间:2017-01-30 11:15:04

标签: php doctrine symfony

一个简单的(希望):

保存具有多个唯一索引的实体时,如何知道哪一个抛出异常?我想如果有几次同时失败,我只会抓到一个,那没关系。但是如果可以的话,我仍然想知道向用户报告哪一个。

抛回异常消息或回复“其中一个字段失败”并不是很好。

我的代码类似于:

try {
     $this->getEntityManager()->persist($user);
     $this->getEntityManager()->flush();

     $response
         ->setPayload($user)
         ->setStatus(Response::STATUS_OK)
         ->setType(Response::SINGLE);
} catch (UniqueConstraintViolationException $e) {
     $response
         ->setStatus(Response::STATUS_ERROR)
         ->setMessage('Whish I knew what column failed. Alas, I only know something went wrong.');
}

ORM定义有类似的内容:

TresMonitos\SomeBundle\Entity\User:
    type: entity
    table: user
    repositoryClass: TresMonitos\SomeBundle\Repository\UserRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        username:
            type: string
            length: '25'
            unique: true
        email:
            type: string
            length: '100'
            unique: true

我得到了UniqueConstraintViolationException,但我没有在$e中看到如何识别该列。消息只是引用索引。为了完整起见:

  

SQLSTATE [23000]:完整性约束违规:1062密钥'UNIQ_8D93D649F85E0677的重复条目'xxx'。

我可以在尝试插入之前查询数据库,以查找我是否有与这些字段匹配的现有行(如果答案不可解决,我想我将不得不这样做 )。

0 个答案:

没有答案