我正在使用Doctrine 1.2和Symfony 1.4。
在我的操作中,我有两个不同的查询返回不同的结果集。不知怎的,第二个查询似乎改变了第一个查询的结果(或引用?),我没有任何线索为什么......
以下是一个例子:
$this->categories = Doctrine_Query::create()
->from('Categorie AS c')
->innerJoin('c.Activite AS a')
->where('a.archive = ?', false)
->execute();
print_r($this->categories->toArray()); // Return $this->categories results, normal behavior.
$this->evil_query = Doctrine_Query::create()
->from('Categorie AS c')
->innerJoin('c.Activite AS a')
->where('a.archive = ?', true)
->execute();
print_r($this->categories->toArray()); // Should be the same as before, but it return $this->evil_query results instead!
为什么Doctrine会这样做?这让我疯狂。谢谢!
为简单起见,似乎查询2正在劫持查询1结果。
答案 0 :(得分:5)
在查询之间使用类似的东西($em
- 实体经理):
$em->clear(); // Detaches all objects from Doctrine!
http://docs.doctrine-project.org/en/2.0.x/reference/batch-processing.html
答案 1 :(得分:2)
在toArray()
中的Doctrine_Collection
方法的API文档中,它说:
模仿
的结果$query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
我怀疑你满意地回答这个问题,你将不得不通过源代码。
答案 2 :(得分:0)
这似乎是$ this->类别和$ this-> evil_query指向同一个地方的问题。 $this->evil_query === $this->categories
和$this->evil_query == $this->categories
的结果是什么?
答案 3 :(得分:0)
Hubert,您是否尝试将查询存储到单独的变量中,然后在其上调用execute()
方法?
我的意思是:
$good_query = Doctrine_Query::create()
->from('...')
->innerJoin('...')
->where('...', false)
;
$evil_query = Doctrine_Query::create()
->from('...')
->innerJoin('...')
->where('...', true)
;
$this->categories = $good_query->execute();
$this->evil_query = $evil_query->execute();
似乎两个属性(categories
和evil_query
)都指向同一个对象。
答案 4 :(得分:-1)
嗯,在您print_r
查询第一个查询的结果后 - 将最后一行更改为print_r($this->evil_query->toArray());
以查看差异:)