1

你好!

我尝试使用 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();

注意:我知道我可以一个接一个地使用 ->andWhere 等,但这只是为了 XDebug 目的。
注意2:$authNamespace->store 代表 GPos_Model_Store 实体的 ID。

无论如何,我得到一个例外$queryBuilder->where('s.store = ?', $authNamespace->store)声明:“在这种情况下不允许表达类型''。”

我尝试使用实体本身,但随后收到“在此上下文中不允许使用 'GPos_Model_Store' 类型的表达式”。例外...

你们中的任何人都可以指出我在这里做错了什么吗?

谢谢!

4

1 回答 1

6

发现我的错误。

将我的查询更改为:

$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();

现在它就像一个魅力。

于 2012-05-18T13:35:07.110 回答