2013-11-20 87 views
0

我試圖創建一個查詢,使用doctrine ODM查詢生成器,其中引用的關聯(eventListeners非空 - 或集合有一個或多個項目。Doctrine ODM查詢生成器 - 查找集合是空的

查詢:

$qb = $om->createQueryBuilder(FormService::ENTITY_CLASS_NAME_FORM); 
$query = $qb->field('website.$id')->equals(new \MongoId($website->getId())) 
      ->field('status.name')->equals(FormService::STATUS_PUBLISHED) 
      ->field('eventListeners')->notEqual(array()); 
      ->getQuery(); 
$results = $query->execute(); 

我已經創作,在我努力與API;此行顯然是不正確,因爲它仍返回所有的文件,無論

->field('eventListeners')->notEqual(array()); 

我可以看到the documentation你可以使用field('eventListeners')->size(3);但我不事先知道集合的大小應該是什麼。

如何使用Doctrine ODM查詢非空集合?

回答

2

它可能不是實現這一目標的最佳途徑,但它的工作:

$qb = $om->createQueryBuilder(FormService::ENTITY_CLASS_NAME_FORM); 
$query = $qb->field('website.$id')->equals(new \MongoId($website->getId())) 
      ->field('status.name')->equals(FormService::STATUS_PUBLISHED) 
      ->field('eventListeners.0')->exists(true) 
      ->getQuery(); 

$results = $query->execute(); 

這假定它是一個基於0的指數Collection而不是Hash

我意識到你可以在mongo中做DB.find({eventListeners: {$not: {$size: 0}}}),但我不確定如何在ODM查詢生成器中正確地構造它。

在審查了odm documentation之後,我不確定是否可以這樣做。

另一種方法是使用$where函數:http://docs.mongodb.org/manual/reference/operator/query/where/

相關問題