原则/DQL 在验证期间将表单值作为 DQL 结果返回


Doctrine/DQL returning form values as DQL result during validation

在我的系统中,我可以在旺季指定 2 周的预订,因此,如果两个兄弟的家庭层次结构中较低的两个人想要在旺季预订同一时间段,则适用优先规则。

我需要获取表单中选择的联系人的期间预订,因此我将以下代码添加到验证器中的验证函数中(1 用于测试):

public function validate($value, Constraint $constraint) {
   $PB = $this->doctrine->getRepository('AppBundle:Period')->getPBForContact(1);
   var_dump($PB);
   die();

以下是相应函数的存储库代码:

public function getPBForContact($Id){
  $em = $this->getEntityManager();
  $query = $em->createQuery('SELECT PB FROM AppBundle:Period PB JOIN PB.contact C WHERE C.id = :Id AND PB.draft = FALSE')->setParameter('Id', $Id);
  $PB = $query->getSingleResult();        
  return $PB;
}

麻烦的是,当我转储预订期间时,给出的输出是编辑表单上的日期,而不是数据库中记录的日期。当我在 DQL 中指定列时,我从数据库记录中获得了开始和结束日期,但我不再以这种方式拥有对象。此外,当我使用其他联系人的 ID 时,它会为我提供该联系人的期间预订的正确日期。

为什么在尚未保存时返回输入的表单值?我该怎么做才能获取数据库值而不是表单值?

我正在使用Symfony 2.7和Doctrine。

这是因为 doctrine 对加载的对象使用标识映射。不能简单地使用同一实体的两个版本。解决方案取决于许多因素。例如,您可以在处理表单之前克隆实体并使用副本。