Doctrine ORM, два разных запроса выдают одинаковый набор результатов - PullRequest
4 голосов
/ 01 ноября 2010

Я использую 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!

Почему Доктрина так себя ведет? Это сводит меня с ума. Спасибо!

Для простоты кажется, что Query 2 угоняет результат Query 1.

Ответы [ 5 ]

5 голосов
/ 29 октября 2012

Используйте что-то подобное между запросами ($em - менеджер сущностей):

$em->clear(); // Detaches all objects from Doctrine!

http://docs.doctrine -project.org / о / 2.0.x / ссылки / партия-processing.html

2 голосов
/ 08 декабря 2010

В документации API для метода toArray() в Doctrine_Collection написано:

Имитирует результат $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);

Я подозреваю, что ответилэтот вопрос, к вашему удовлетворению, вам придется пройти через исходный код.

0 голосов
/ 13 декабря 2010

Юбер, вы пытались сохранить запрос в отдельной переменной и затем , вызывая для него метод 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) указывают на один и тот же объект.

0 голосов
/ 09 декабря 2010

Похоже, что это проблема $ this-> Categories и $ this-> evil_query, указывающая на то же место Каковы результаты $this->evil_query === $this->categories и $this->evil_query == $this->categories?

0 голосов
/ 01 ноября 2010

Erm, после обоих запросов вы print_r результат первого запроса - измените последнюю строку на print_r($this->evil_query->toArray());, чтобы увидеть разницу:)

...