一个简单的(希望):
保存具有多个唯一索引的实体时,如何知道哪一个抛出异常?我想如果有几次同时失败,我只会抓到一个,那没关系。但是如果可以的话,我仍然想知道向用户报告哪一个。
抛回异常消息或回复“其中一个字段失败”并不是很好。
我的代码类似于:
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'。
我可以在尝试插入之前查询数据库,以查找我是否有与这些字段匹配的现有行(如果答案不可解决,我想我将不得不这样做 )。