2012-11-22 165 views
0

我确信之前已经询问过这个问题,但我不确定我期待的术语,所以请耐心等待!Doctrine2表继承

我有一个表结构,看起来像这样:

[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是,我敢肯定这是可能的,但如果任何人都可以指出我在正确的方向,将不胜感激!

回答

0

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

+0

不,性能不是问题,至少现在不是。我想我会写我自己的查询。谢谢! –