【问题标题】:Symfony compare form to database [duplicate]Symfony 将表单与数据库进行比较 [重复]
【发布时间】:2021-03-14 03:38:43
【问题描述】:

如何将提交的表单字段与实际数据库数据进行比较?

如果我使用我的存储库来获取实体的副本,它实际上只是获取提交的表单的副本。我想知道表单中提交的数据是否与表单发生了变化。

namespace App\Validator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Doctrine\ORM\EntityManagerInterface;
use \App\Entity\Logistics\CarrierSendle;
use Symfony\Component\Security\Core\Security;

class CarrierDescUniqueValidator extends ConstraintValidator {

    /**
     * @var Security
     */
    private $security;

    /**
     * @var Em
     */
    private $em;

    public function __construct(EntityManagerInterface $em, Security $security) {
        $this->em = $em;
        $this->security = $security;
    }

    public function validate($object, Constraint $constraint) {
        /* @var $constraint \App\Validator\CarrierDescUnique */
        
        if (!$constraint instanceof CarrierDescUnique) {
            throw new UnexpectedTypeException($constraint, CarrierDescUnique::class);
        }
        
        if (null === $object->getDescription() || '' === $object->getDescription()) {
            return;
        }
        
        $repoCurrent = $this->em->getRepository(CarrierSendle::class)
                ->GetCurrentName($this->security->getUser(), $object->getSendleId());
        
        if ($object->getDescription() === $repoCurrent->getDescription()) {
            return;
        }
        
        var_dump($object); var_dump($repoCurrent); die;
        
        ...
    }

}

【问题讨论】:

    标签: php symfony symfony-validator


    【解决方案1】:

    UnitOfWork() 是答案,在这里找到Source

    这将查询数据库并且不使用注入验证器的缓存版本。

    $original = $this->em->getUnitOfWork()->getOriginalEntityData($object);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      相关资源
      最近更新 更多