2011-04-30 67 views
0

我是新來的教條,我遇到了一個問題。那就是:存儲結果集的原則?

我有以下型號/實體:

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

回答

0

我想通了finaly:d

事實證明,它與延遲加載做。一旦我在連接成員的鏈接上設置'fetch = eager',一切正常。

希望這對任何人有同樣的問題幫助...