我有以下查询,该查询应检查另一个实体中的开始日期和结束日期,并将其与开始日期和结束日期输入以创建实体的实例,但是它没有返回任何内容。
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();
我使用学说多长时间,我从未见过:
- 在mysql中(和postgresql,sqlite)均等符号是
=
,而不是==
。 - 在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')
- 什么是
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
。