Doctrine 2 One-To-Many检索许多边返回一个空集合

时间:2012-09-13 17:55:51

标签: php doctrine one-to-many

我正在开发一个利用与学说2集成的Zend Framework 1.12的项目。我在所述项目中遇到了双向一对多关系的问题。 关于我的问题的两个实体是团队和球员;一支球队可以有很多球员。

团队实体:

namespace Entities;

use Doctrine\Common\Collections\Collection,
    Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity(repositoryClass="Repositories\TeamRepository")
 * @Table(name="team")
 */
class Team extends Entity{

/**
 * @Column(type="string", length=255)
 */
protected $name;

/**
 * @OneToMany(targetEntity="Player", mappedBy="team")
 */
protected $players;

public function __construct() {
    $this->players = new ArrayCollection();
}


public function getName(){
    return $this->name;
}

public function setName($name) {
    $this->name = $name;
    return $this;
}

public function getPlayers() {
    return $this->players;
}

玩家实体:

namespace Entities;

/**
* @Entity(repositoryClass="Repositories\PlayerRepository")
* @Table(name="player")
*/
class Player extends Entity{

    public function __construct() {

    }

    /**
     * @Column(type="string", length=255)
     */
    protected $name;

    /**
     * @ManyToOne(targetEntity="Team", inversedBy="players")
     * @JoinColumn(name="team_id", referencedColumnName="id")
     */
    protected $team;

    public function getName(){
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
        return $this;
    }

    public function getTeam() {
        return $this->team;
    }

    public function setTeam($team) {
        $this->team = $team;
        return $this;
    }

}

现在在我的播放器控制器中,我可以检索一个播放器并获得团队名称

$oPlayer    = $this->_em->find('Entities\Player', $player_id);
$teamname   = $oPlayer->getTeam()->getName();

这符合预期,我成功获得了球员队伍的名称。 然而,相反的方法是行不通的。我无法找回给予球队的所有球员

$oTeam = $this->_em->find('Entities\Team', $team_id);
$oPlayers = $oTeam->getPlayers();

当我var_dump时,结果看起来像

object(Doctrine\ORM\PersistentCollection)#238 (9) {
  ["snapshot":"Doctrine\ORM\PersistentCollection":private]=>
  array(0) {
  }
  ["owner":"Doctrine\ORM\PersistentCollection":private]=>
  object(Entities\Team)#195 (7) {
     ...
  }

请注意,似乎构建了persistenCollection,但数组为空。 我已经广泛阅读了这本学说手册,并用谷歌搜索了我,现在我不知所措。

此外,没有错误信息,我很难解决这个问题。 任何指针都非常受欢迎。

1 个答案:

答案 0 :(得分:-1)

问题已经解决。我一直试图将解决方案拼凑为后代,但得出的结论是我不再拥有我现在怀疑原始错误所在的文件。我设法得到了另一个项目的工作副本。通过强力'diff'-ing和替换代码我追踪持久集合的空数组的错误,到我的bootstrap和resources / doctrine.php配置文件,遗憾的是我不再拥有,因此无法确认这一点。随着字符串(4)“团队”仍然被返回(正如评论中所讨论的)令人尴尬的是我终于发现它只是因为我把它放入了学说库文件而忘记了。