php - Symfony 将表单与数据库进行比较
问题描述
如何将提交的表单字段与实际数据库数据进行比较?
如果我使用我的存储库来获取实体的副本,它实际上只是获取提交的表单的副本。我想知道表单中提交的数据是否与表单发生了变化。
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;
...
}
}
解决方案
UnitOfWork() 是答案,在这里找到Source
这将查询数据库并且不使用注入验证器的缓存版本。
$original = $this->em->getUnitOfWork()->getOriginalEntityData($object);
推荐阅读
- firebase - 将数据发送到 React Native 中的导入模块
- ruby - 下一个键/值对在尝试使用新键添加对时覆盖散列中的现有对
- java - 创建文本修改系统,如 stackoverflow 上的答案字段
- php - 通过 exec 运行命令而不将其发送到后台时,Laravel 挂起
- python - 布尔语句Python中的零除法错误
- javascript - 如何在离子或角度页面中显示自定义 javascript 小部件
- ios - Swift 共享扩展无法加载图像
- android - AWS Cognito 接受任何密码
- class - 析构问题
- python - 了解 tensorflow 中 tf.slice 的参数以及为什么我不能更改它