您好!
我尝试使用QueryBuilder设置DQL查询,但到目前为止还没有好... 我想要的查询看起来像这样:
$queryBuilder = Zend_Registry::get('entityManager')->createQueryBuilder();
$queryBuilder->select('s.*');
$queryBuilder->from('GPos_Model_Sale', 's');
$queryBuilder->where('s.store = ?', $authNamespace->store); //breaks on this line
$queryBuilder->andWhere('s.seller = ?', $seller->getId());
$queryBuilder->andWhere('((s.date >= ?', $dateStart);
$queryBuilder->andWhere('s.date <= ?', $dateEnd);
$queryBuilder->andWhere('s.status = "closed") OR s.status = "onhold")');
$queryBuilder->groupby('s.id');
return $queryBuilder->getQuery()->getResult();
注意:我知道我可以一个接一个地使用 - &gt; andWhere等,但它只是用于XDebug目的。
Note2 :$ authNamespace-&gt; store代表GPos_Model_Store实体的ID。
无论如何,我在$queryBuilder->where('s.store = ?', $authNamespace->store)
上得到一个例外:“在此上下文中不允许表达类型'。”
我尝试使用实体本身,但后来在这种情况下我收到了“类型'GPos_Model_Store'的表达式。”例外...
你们有没有人能指出我在这里做错了什么?
谢谢!
答案 0 :(得分:5)
发现我的错误。
将我的查询更改为:
$queryBuilder = Zend_Registry::get('entityManager')->createQueryBuilder();
$queryBuilder->select('s');
$queryBuilder->from('GPos_Model_Sale', 's');
$queryBuilder->where('s.store = :store');
$queryBuilder->andWhere('s.seller = :seller');
$queryBuilder->andWhere('((s.date >= :dateStart');
$queryBuilder->andWhere('s.date <= :dateEnd');
$queryBuilder->andWhere('s.status = \'closed\') OR s.status = \'onhold\')');
$queryBuilder->groupby('s.id');
$queryBuilder->setParameter('store', $store->getId());
$queryBuilder->setParameter('seller', $seller->getId());
$queryBuilder->setParameter('dateStart', $dateStart->format('Y-m-d H:i:s'));
$queryBuilder->setParameter('dateEnd', $dateEnd->format('Y-m-d H:i:s'));
return $queryBuilder->getQuery()->getResult();
现在它就像一个魅力。