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

时间:2016-01-21 05:23:16

标签: php forms validation symfony doctrine-orm

在我的系统中,我可以在旺季指定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。

1 个答案:

答案 0 :(得分:0)

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