问题描述
ENTITY
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Table(name="_apiKey")
* @ORM\Entity(repositoryClass="Eve\ProfileBundle\Entity\Repository\apiKeyRepository")
* @UniqueEntity(fields={"keyID", "vCode", "accountID"},
* message="you already own this api")
*/
class apiKey
{
public function __construct()
{
// empty
}
// relations start
// relations end
/**
* @ORM\Column(name="entryID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $entryID;
/**
* @ORM\Column(name="accountID", type="integer", nullable=false, unique=true)
*/
private $accountID;
/**
* @ORM\Column(name="keyID", type="integer", nullable=false, unique=true)
* @Assert\NotBlank(message="keyID cannot be blank")
*/
private $keyID;
/**
* @ORM\Column(name="vCode", type="string", nullable=false, unique=true)
* @Assert\NotBlank(message="vCode cannot be blank")
*/
private $vCode;
在db
CREATE TABLE IF NOT EXISTS `_apiKey` (
`entryID` int(11) NOT NULL AUTO_INCREMENT,
`accountID` int(11) NOT NULL,
`keyID` int(11) NOT NULL,
`vCode` varchar(255) NOT NULL,
PRIMARY KEY (`entryID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;
当我尝试添加dublicate我有错误
When i try to add dublicate i have an error
An exception occurred while executing 'INSERT INTO _apiKey (accountID, keyID, vCode) VALUES (?, ?, ?)' with params {"1":38,"2":"1233","3":"123"}:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '38-1233-123' for key 'accountID'
没关系,但我该怎么处理? 消息选项在 @UniqueEntity()中不起作用,如何在表单错误中显示此错误(无一例外)
and it's fine, but how can i handle it? "message option" is not working in @UniqueEntity() how can i show this error in form errors (without exception)
我想要什么(不含entryID的db的简单示例)
what i want (simple example for db without entryID)
123 123 123 - add
123 123 1234 - add
123 125 123 - add
123 123 1234 - form-error on inserting
123 123 123 - form-error on inserting
234 123 123 - add
234 123 123 - form-error on inserting
推荐答案
如果要检查唯一性的accountId单独添加到您的课堂:
If you want to check the uniqueness of accountId alone, add this to your class:
@UniqueEntity(fields={"accountID"}, message="This account is already taken")
这里是完整的代码,检查组合keyID, vCode,accountID,还有accountID的唯一性:
Here the full code that check the uniqueness of the combinaison "keyID", "vCode", "accountID" and also the uniqueness of "accountID" alone:
<?php
// ...
/**
* @ORM\Table(name="_apiKey")
* @ORM\Entity(repositoryClass="Eve\ProfileBundle\Entity\Repository\apiKeyRepository")
* @UniqueEntity(fields={"keyID", "vCode", "accountID"}, message="you already own this api")
* @UniqueEntity(fields={"accountID"}, message="This account ID is already taken")
*/
class apiKey
{
我不知道你是否看到错误只影响域accountID,如果你不希望这个行为只是从你的属性$ accountID中删除unique = true。
I don't know if you saw that the error only affect the field accountID, if you don't want this behavior just remove "unique=true" from your property $accountID.
如果你只想说cominaisonkeyID,vCode,accountID在数据库中必须是唯一的,请像下面那样执行:
If you just want to say that the cominaison "keyID", "vCode", "accountID" must be unique in the database, proceed like that:
/**
* @ORM\Table(name="_apiKey",
* uniqueConstraints = {
* @ORM\UniqueConstraint(name="_api_key_key_id_v_code_account_id", columns={"keyID", "vCode", "accountID})
* }
* )
*
* ...
* etc, ...
*/
class apiKey
这篇关于Symfony2,Doctrine,@UniqueEntity句柄异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!