我是新來的教條,我遇到了一個問題。那就是:存儲結果集的原則?
我有以下型號/實體:
<?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();
當我再次刪除$團隊=模型.......線,一切工作正常。所以在我看來,像教條一樣按照這條線過濾它的內部結果集,然後只從那個結果集中搜索。
有關如何解決此問題的任何想法?日Thnx