无法拆分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();