1

問題の概要

Doctrine2 を使用して Symfony2 で双方向の OneToOne 関係を作成する際に問題が発生しています。私のデータベースには、関連付けようとしている 2 つのテーブル、CrmCapacity と CrmPackages があります。CrmCapacity には、CrmPackages の Id フィールドに一致するフィールド PackageId があります。

パッケージから容量を取得できますが、容量からパッケージを取得できないようです。これは双方向ではなく一方向の関係です。

以下は私のコントローラーのコードです。これは、パッケージから容量にアクセスするのに問題なく機能します。

$package = $this->getDoctrine()
            ->getRepository('LargeAzureBundle:Package')
            ->find('ID-HERE');

var_dump($package->getName());
var_dump($package->getCapacity()->getIsIncompleteReason());
die();

これは正常に機能しますが、次の例では容量のデータを取得しますが、パッケージのデータは取得しません

$capacity = $this->getDoctrine()
    ->getRepository('LargeAzureBundle:Capacity')
    ->find('3FF564FC-5EA0-E211-B8AC-005056B70002');

var_dump($capacity->getIsIncompleteReason());
var_dump($capacity->getPackage()->getName());
die();

エンティティ

以下は私のエンティティからの注釈です

パッケージ

class Package {
    /**
     * @OneToOne(targetEntity="Capacity", mappedBy="Package")
     */
    protected $Capacity;

    --SNIP--
}

容量

class Capacity {
    /**
     * @OneToOne(targetEntity="Package", inversedBy="Capacity")
     * @JoinColumn(name="PackageId", referencedColumnName="Id")
     */
    protected $Package;

    --SNIP--
}

何か案は?私はこれに少し困惑しています。

4

1 に答える 1

2

Symfony IRC チャンネルの memoryleak から回答を得ることができました。この場合、アノテーションにフェッチ属性を設定するとうまくいきました。

class Capacity {
    /**
     * @OneToOne(targetEntity="Package", inversedBy="Capacity", fetch="EAGER")
     * @JoinColumn(name="PackageId", referencedColumnName="Id")
     */
    protected $Package;

    --SNIP--
}
于 2013-10-08T12:25:58.580 に答える