0

これは以前にも聞かれたと思いますが、私が探している用語がよくわからないので、ご容赦ください!

次のようなテーブル構造があります。

[Branch]        [Ville]
- ID            - ID
- Ville_ID      - Region_ID

                [Region]
                - ID
                - Province_ID

                [Province]
                - ID
                - Country_ID

                [Country]
                - ID

ブランチ エンティティは次のようになります。

/**
 * @ORM\Entity
 * @ORM\Table()
 */
class Succursale
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue()
     * @ORM\Column(name="ID", type="integer")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Hero\LieuBundle\Entity\Ville")
     * @ORM\JoinColumn(name="Ville_ID", referencedColumnName="ID", nullable=false)
     */
    protected $ville;
}

都市、地域、州、および国のエンティティは、基本的に互いに同一です。

/**
 * @ORM\Entity
 * @ORM\Table()
 */
class Ville
{
    /**
     * @ORM\Column(name="ID", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue()
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Hero\LieuBundle\Entity\Region")
     * @ORM\JoinColumn(name="Region_ID", referencedColumnName="ID", nullable=false)
     */
    protected $region;
}

コードは単純です (Symfony2):

$succursales = $entreprise->getSuccursales();

そして、私が持っている小枝テンプレートで:

<ul>
{% for item in succursales %}
    <li>{{ item.adresse }}, {{ item.ville.nom }}</li>
{% endfor %}
</ul>

これはすべてうまくいきます。ブランチを取得すると、問題なく市区町村を取得できますが、1 回のクエリで地域、州、国を取得できると便利なのは明らかです。Doctrine2 の素晴らしさを見て、これは可能だと確信していますが、誰かが私を正しい方向に向けることができれば幸いです!

4

1 に答える 1

0

1つのクエリでそれを行う唯一の方法は、取得する結果に対して独自のカスタマイズされたクエリを作成することです。Doctrineは、遅延読み込みを使用して、必要に応じて関連オブジェクトを読み込みます。遅延読み込みを無効にすることはできますが、すべてのテーブルが結合されるわけではなく、複数のクエリが実行されます。とにかく、大量のトラフィックがあり、それらも複雑に見えない限り、決して実行されない5つほどのクエリはサーバーにとって問題になるはずです。その時点でそのような種類のクエリが重要である場合は、教義のORM部分を削除することを検討する必要があります...

于 2012-11-22T03:11:57.757 に答える