【发布时间】:2014-03-16 16:59:15
【问题描述】:
我正在尝试使用 Symfony 验证引擎验证一个唯一字段。我已经创建了验证约束并且一切正常,但我希望在我的验证器中拥有经过验证的实体(或 POST 数据)。这是它现在的样子:
<?php
namespace Webrama\ProductBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Translation\TranslatorInterface;
class EanCodeValidator extends ConstraintValidator
{
private $entityManager;
private $translator;
/**
* @param EntityManager $entityManager
*/
public function __construct(EntityManager $entityManager, TranslatorInterface $translator)
{
$this->entityManager = $entityManager;
$this->translator = $translator;
}
... some logic ...
private function isEanUnique($value)
{
$query = $this->entityManager->createQuery("SELECT p.id FROM WebramaProductBundle:Product p WHERE p.eanCode = :eanCode AND p.eanCode <> 0");
$query->setParameter('eanCode', $value);
$result = $query->execute();
if(empty($result))
return true;
return false;
}
}
方法 isEanUnique 将在更新产品时返回 false,因为它本身包含 ean 并且它是正确的。我需要做什么来修复?
$query = $this->entityManager->createQuery("SELECT p.id FROM WebramaProductBundle:Product p WHERE p.eanCode = :eanCode AND p.eanCode <> 0 AND p.id <> :productId");
$query->setParameter('eanCode', $value);
$query->setParameter('id', $this->product->getId());
但我不知道如何将 $this->product 带到这里...有什么想法吗?
【问题讨论】:
标签: php sql validation symfony entities