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>

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

4

1 回答 1

0

我看到用一个查询来做到这一点的唯一方法是为您想要检索的结果编写您自己的自定义查询。Doctrine 在需要时使用延迟加载来加载相关对象。您可以禁用延迟加载,但这不会加入所有表,它仍会运行多个查询。无论如何,将运行的 5 个左右的查询绝不应该成为您的服务器的问题,除非您有大量的流量并且它们看起来也不复杂。如果您当时认为这类查询对您很重要,那么您应该考虑从教义中删除 ORM 部分......

于 2012-11-22T03:11:57.757 回答