1

我正在开发一个使用 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,但是该数组是空的。我已经广泛阅读了教义手册,并用谷歌搜索了我的背后,现在不知所措。

还有没有错误消息的事实,我很难解决这个问题。任何指针都会受到欢迎。

4

1 回答 1

-1

这个问题已经解决。我一直试图为后代解决问题,但得出的结论是,我不再拥有现在怀疑原始错误所在的文件。我设法从另一个项目中获得了一份工作副本。通过蛮力 'diff'-ing 和替换代码,我将持久集合的空数组的错误追踪到我的引导程序和 resources/doctrine.php 配置文件,不幸的是我不再拥有这些文件,因此无法确认这一点. 令人尴尬的是,仍然返回 string(4) “team”(如评论中所讨论的),我终于发现这只是由于 die() 我放入了学说库文件并忘记了。

于 2012-09-20T19:14:02.360 回答