Doctrine2表继承

时间:2012-11-22 00:50:33

标签: symfony doctrine-orm

我确信之前有人问过,但我不确定我要找的是什么,所以请耐心等待我!

我有一个如下所示的表结构:

[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>

一切正常。当我获取一个分支时,我可以毫不费力地获得这个城市,但显然能够通过单个查询获得该地区,省和国家会很好。看到Doctrine2有多棒,我相信这是可能的,但如果有人能指出我正确的方向,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

我看到用一个查询执行此操作的唯一方法是为要检索的结果编写自己的自定义查询。 Doctrine使用延迟加载在需要时加载相关对象。您可以禁用延迟加载,但不会加入所有表,它仍将运行多个查询。无论如何,除非你有大量的大量流量并且看起来也不复杂,否则将运行的大约5个查询应该是服务器的问题。如果你在那一点上那些查询对你来说很重要,你应该考虑去掉学说中的ORM部分......