Я новичок в доктрине и столкнулся с проблемой.Вот оно:
У меня есть следующая модель / сущность:
<?php
namespace models;
/** @Entity @Table(name="teams") @HasLifecycleCallbacks */
class Team
{
...
/** @OneToMany(targetEntity="Teammember", mappedBy="team") */
private $members;
...
function getTeamsILeadForGame($user, $game)
{
$q = $this->doctrine->em->createQuery("SELECT t, tm FROM models\Team t JOIN t.members tm WHERE tm.user = ?1 AND t.game = ?2 AND tm.is_leader = ?3 ORDER BY t.name ASC");
$q->setParameter(1, $user);
$q->setParameter(2, $game);
$q->setParameter(3, 1);
try {
return $q->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
Как видите, есть ссылка на сущность Teammember.В функции, которую я написал, я пытаюсь получить все команды, в которых текущий пользователь имеет флаг is_leader, установленный в 1.
Этот запрос выполняется просто отлично, и я ожидаю, что результат будет таким.
Теперь о проблеме.Далее в моем контроллере я пытаюсь сделать следующее:
$ postteam = $ this-> em-> find ('models \ Team', $ this-> input-> post ('team'));
Данные команды, которые она возвращает, верны, но когда я вызываю $ postteam-> getMembers (), он просто возвращает 1 строку (ту, где is_leader = 1) вместо всех членов этой команды.
Значит, похоже, что доктрина удерживает мою другую функцию в затылке?Я действительно не понимаю, почему это так.
Итак, как я уже сказал, мой контроллер выглядит следующим образом:
$teams = models\Team::getTeamsILeadForGame($this->user->getId(), $tournament->getGame()->getId());
// Do some checks on the returned teams
$postteam = $this->em->find('models\Team', $this->input->post('team'));
$postteam->getMembers();
Когда я удаляю $ team = models ....... линия, все снова работает нормально.Таким образом, мне кажется, что доктрина фильтрует свой внутренний набор результатов по этой строке, а затем выполняет поиск только в этом наборе результатов.
Есть идеи, как это исправить?Thnx