1

私は、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はビルドされているように見えますが、配列は空であることに注意してください。私は教義のマニュアルを広範囲に読んで、私の後ろをグーグルで検索しました、そして今途方に暮れています。

また、エラーメッセージがないので、この問題を解決するのに苦労しています。どんなポインタでも大歓迎です。

4

1 に答える 1

-1

問題は解決されました。私は後世のために解決策を一緒にパズルしようとしてきましたが、元のエラーが見つかったと思われるファイルがもうないという結論に達しました。私はなんとか別のプロジェクトから派生した作業コピーを手に入れることができました。総当たり攻撃でコードを「差分」して置換することで、永続コレクションの空の配列のエラーを、ブートストラップとresources / doctrine.php構成ファイルまで追跡しました。残念ながら、これはもう存在しないため、これを確認できません。 。string(4) "team"がまだ返されているので(コメントで説明されているように)、恥ずかしいことに、それは私が教義ライブラリファイルに入れて忘れたdie()によるものであることがようやくわかりました。

于 2012-09-20T19:14:02.360 に答える