Search code examples
exceptiondoctrine-ormdql

DQL QueryBuilder exception


Hello!

I've tried to set a DQL query using QueryBuilder but so far no good... The query I'd like to have looks like this:

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

Note: I know I could use the ->andWhere etc one after another but it was just for XDebug purpose.
Note2: $authNamespace->store stands for a GPos_Model_Store entity's ID.

Anyways, I get an Exception on $queryBuilder->where('s.store = ?', $authNamespace->store) stating : "Expression of type '' not allowed in this context."

I tried using an entity itself instead but then I received a "Expression of type 'GPos_Model_Store' not allowed in this context." exception...

Can any of you point out what I'm doing wrong here ?

Thank you!


Solution

  • Found my mistake.

    Changed my query to:

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

    And now it works like a charm.