私は、Doctrine2と統合されたZendFramework1.12を利用するプロジェクトに取り組んでいます。このプロジェクトで双方向の1対多の関係に問題があります。私の問題に関する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はビルドされているように見えますが、配列は空であることに注意してください。私は教義のマニュアルを広範囲に読んで、私の後ろをグーグルで検索しました、そして今途方に暮れています。
また、エラーメッセージがないので、この問題を解決するのに苦労しています。どんなポインタでも大歓迎です。