我是学说的新手,我遇到了一个问题。这是:
我有以下模型/实体:
<?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-&gt; em-&gt; find('models \ Team',$ this-&gt; input-&gt; post('team'));
它返回的团队数据是正确的,但是当我调用$ postteam-&gt; 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();
当我删除$ teams = models .......行时,一切正常。因此,在我看来,doctrine过滤了该行的内部结果集,然后只搜索该结果集。
有关如何解决此问题的任何想法?日Thnx
答案 0 :(得分:0)
我最终想通了:D
事实证明它与延迟加载有关。一旦我在成员的链接上设置'fetch = eager',一切正常。
希望这对有同样问题的人有任何帮助......