我正在开发一个使用 Zend Framework 1.12 与学说 2 集成的项目。我在所述项目中遇到了双向一对多关系的问题。与我的问题有关的两个实体是团队和玩家;一个球队可以有很多球员。
团队实体:
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,但是该数组是空的。我已经广泛阅读了教义手册,并用谷歌搜索了我的背后,现在不知所措。
还有没有错误消息的事实,我很难解决这个问题。任何指针都会受到欢迎。