1
我面临着UniqueEntity验证的问题。 我有一个字段“internal_asset_number”应该是唯一的,它在创建时工作正常。更新时,我编辑现有的当前数据具有相同的值,它显示“已经有一个资产与该内部号码!”但它不应该是因为它是相同的条目。Symfony 3更新中的UniqueEntity验证
实体:
/**
* Asset
*
* @ORM\Table(schema="assets", name="asset", uniqueConstraints= {@ORM\UniqueConstraint(name="uk_asset_internal_asset_number_client_id", columns={"internal_asset_number", "client_id"})})
* @ORM\Entity(repositoryClass="Api\AssetBundle\Entity\AssetRepository")
* @UniqueEntity(fields={"internalAssetNumber"}, groups={"post", "put"}, message="There is already an asset with that internal number!")
*/
class Asset
{
/**
* @var guid
*
* @ORM\Column(name="id", type="string")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="client_id", type="string", length=255, nullable=false)
*/
private $clientId;
/**
* @var string
*
* @ORM\Column(name="internal_asset_number", type="string", length=255, nullable=true, unique=true)
*/
private $internalAssetNumber;
更新方法:
public function putAssetAction(Request $request, $id)
{
$data = $this->deserializer('Api\AssetBundle\Entity\Asset', $request, 'put');
if ($data instanceof \Exception) {
return View::create(['error' => $data->getMessage()], 400);
}
$validator = $this->get('validator');
$errors = $validator->validate($data, null, 'put');
if (count($errors) > 0) {
$errorsResponse = [];
foreach ($errors as $error) {
$errorsResponse = $error->getMessage();
}
return View::create(array('error' => $errorsResponse), 400);
}
...
你如何做更新?你是什么意思的“封锁”?你会得到什么错误? –
@JakubMatczak我得到错误消息,我已经设置它重复时。但在这种情况下,我用相同的值更新相同的条目,所以它不应该发生。我更新了我的问题。 – Cosmin
当给定条件的数据库中存在一个条目时,'UniqueEntityValidator'将检查被验证的对象和找到的对象是否相同(即它执行身份检查)。这种检查在你的情况下失败,因为在你的情况下被验证的对象是反序列化的对象,但不是由Doctrine管理的对象。 – xabbuh