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 に答える