无法拆分Doctrine ODM查询

问题描述:

SO I have the following Mongo ODM query that works just fine:

      $query = $dm->createQueryBuilder('MainClassifiedBundle:Listing')
         ->select('id', 'title', 'assets')
         ->field('somefield0')->equals($somefield)
         ->field('somefield')->equals($blah)
         ->field('somefield2')->range($minPrice, $maxPrice)
         ->field('somefield3')->near($latitude, $longitude)
         ->getQuery();

 $my_data = $query->execute();

However if I try to break it up like the following:

 $query = $dm->createQueryBuilder('MainClassifiedBundle:Listing')
     ->select('id', 'title', 'assets')
     ->field('somefield0')->equals($somefield)
     ->field('somefield')->equals($blah);

if ($propertyType != 'All') {
     $query->field('someothercrazyfield')->equals($somethingelse);

     $query->field('somefield2')->range($minPrice, $maxPrice)
     ->field('somefield3')->near($latitude, $longitude)
     ->getQuery();

 $my_data = $query->execute();

I get an error that method execute does not exist.

Why?

所以我有以下Mongo ODM查询可以正常工作: p>

   $ query = $ dm-> createQueryBuilder('MainClassifiedBundle:Listing')
  - > select('id','title','assets')
  - > field('somefield0') -  >等于($ somefield)
  - >字段('somefield') - >等于($ blah)
  - >字段('somefield2') - >范围($ minPrice,$ maxPrice)
  - > field('somefield3') - > near($ latitude,$ longitude)
  - > getQuery(); 
 
 $ my_data = $ query-> execute(); 
  code  >  pre> 
 
 

但是,如果我尝试将其分解如下: p>

  $ query = $ dm-> createQueryBuilder('MainClassifiedBundle  :列表')
  - >选择('id','标题','资产')
  - >字段('somefield0') - >等于($ somefield)
  - >字段('  somefield') - >等于($ blah); 
 
if($ propertyType!='All'){
 $ query-> field('someothercrazyfield') - > equals($ somethingelse); 
  
 $ query->字段('所以 mefield2') - > range($ minPrice,$ maxPrice)
  - > field('somefield3') - > near($ latitude,$ longitude)
  - > getQuery(); 
 
 $  my_data = $ query-> execute(); 
  code>  pre> 
 
 

我收到方法执行不存在的错误。 p>

为什么? p> div>

Because you are not storing the query when you call getQuery(). I've changed your example below.

$query = $dm->createQueryBuilder('MainClassifiedBundle:Listing')
    ->select('id', 'title', 'assets')
    ->field('somefield0')->equals($somefield)
    ->field('somefield')->equals($blah);

if ($propertyType != 'All') {
    $query->field('someothercrazyfield')->equals($somethingelse);

    $query->field('somefield2')->range($minPrice, $maxPrice)
       ->field('somefield3')->near($latitude, $longitude);
}

$my_data = $query->getQuery()->execute();