在我的系统中,我可以在旺季指定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。
答案 0 :(得分:0)
这是因为doctrine使用identity map来加载对象。您不能简单地使用同一实体的两个版本。解决方案取决于许多因素。例如,您可以在处理表单之前克隆实体并使用副本。