2016-12-07 220 views
-1

我有以下查询应该检查另一个实体中的开始日期和结束日期,并将其与开始日期和结束日期进行比较,然后输入以创建实体实例,但不返回任何内容。等于DQL查询

public function createAction(Request $request) 
{ 
    $entity = new Payrollperiod(); 
    $form = $this->createCreateForm($entity); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 

     $em = $this->getDoctrine()->getManager(); 
     $qb = $em->getRepository('comtwclagripayrollBundle:PayrollWeek')->createQueryBuilder('p'); 
      $qb->select('p') 
      ->where('p.startDate = :entityStart') 
      ->andWhere('p.endDate = :entityEnd') 
      ->setParameter('entityStart',$entity->getstartDate()) 
      ->setParameter('entityEnd',$entity->getendDate()) 
      ->getQuery() 
      ->getResult(); 
+0

请发布您的异常消息。总是尝试发布错误信息,这会让别人更容易帮助你。 –

+0

问题中应该有一些查询。目前的编辑很混乱 – demongolem

+0

请*停止*破坏你的问题。 –

回答

2

我一直在使用学说多久,我从来没有见过:

  1. 在MySQL(和PostgreSQL,SQLite的)等于符号=,不==
  2. 在DQL中,您不能使用像getStartDate()这样的实体方法,只有属性(详细地说您只能使用实体映射中定义的字段和关联)。

所以:

$qb->select('p')     
    ->where('p.getstartDate()==entity.startDate') 
    ->andWhere('p.getendDate()==entity.endDate'); 

应该是:

$qb->select('p') 
    ->where('p.startDate = entity.startDate') 
    ->andWhere('p.getEndDate = entity.endDate') 
  • 什么是entity.*?您尚未在您的DQL中声明entity实体。
  • [编辑]如果entity.*是另一个实体,你没有定义在查询,则必须将其参数化:

    $qb->select('p') 
        ->where('p.startDate = :entityStart') 
        ->andWhere('p.getEndDate = :entityEnd') 
        ->setParameter('entityStart', $entity->getStartDate()) 
        ->setParameter('entityEnd', $entity->getEndDate()) 
    

    无一例外消息我不能告诉更多有关你的代码。它可能是NonUniqueResultException,因为查询找到多于1个结果。学说(和Symfony)有很多例外,其中一切都很好解释 - 什么是崩溃,为什么,在哪里。有时候甚至连例外的名字都会告诉我们一切 - 比如UniqueConstraintViolationException

    +0

    @Zed我更新了我的答案 –

    +0

    是的,它是另一个实体,但它的一个实例只有在其他实体(表p)中具有匹配的开始和结束日期时才能创建。我会尝试编辑谢谢你!其余的代码是否正确? – Zed

    +0

    我有上述例外 – Zed