存储结果集的学说?

时间:2011-04-30 11:07:14

标签: php doctrine

我是学说的新手,我遇到了一个问题。这是:

我有以下模型/实体:

<?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

1 个答案:

答案 0 :(得分:0)

我最终想通了:D

事实证明它与延迟加载有关。一旦我在成员的链接上设置'fetch = eager',一切正常。

希望这对有同样问题的人有任何帮助......