等于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();

我使用学说多长时间,我从未见过:

  1. 在mysql中(和postgresql,sqlite)均等符号是 =,而不是 ==
  2. 在DQL中,您不能使用诸如 getStartDate()之类的实体方法,只有属性(详细您可以使用实体映射中定义的字段和关联)。

so:

$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')
  1. 什么是entity.*?您尚未在DQL中声明entity实体。

[edit]如果 entity.*是另一个实体,并且不在查询中定义其,则必须参数化:

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

没有例外消息,我无法详细介绍您的代码。它可能是NonUniqueResultException,因为查询发现超过1个结果。

学说(和Symfony)有很多例外,一切都很好解释 - 什么崩溃了,为什么,在哪里。有时甚至例外的名称都告诉我们一切 - 例如UniqueConstraintViolationException

相关内容

  • 没有找到相关文章

最新更新