学说ORM指数通过正确使用

问题描述:

在学说(Symfony)中,我有两个实体之间的1-n关系:一个经理拥有n个企业。学说ORM指数通过正确使用

manager_id | business_id 
1   | 1 
1   | 2 
1   | 3 

我在设定的关系没有问题,但有一些东西,是我不清楚关于索引设置

这是我Manager.orm.yml

Manager: 
    //... 
    indexes: 
     business__index: 
      columns: [business_id] 

    //... 
    manyToOne: 
     business: 
      targetEntity: Business 
      inversedBy: managers 
      cascade: ['persist', 'remove'] 
      orphanRemoval: true 
      joinColumn: 
       name: business_id 
       referencedColumnName: id 
       nullable: false 

这是我Business.orm.yml

Business: 
    //... 
    oneToMany: 
     managers: 
      targetEntity: User\ManagerBundle\Entity\Manager 
      mappedBy: pharmacyBusiness 
      indexBy: business_id # is this correct? 

关系w orks以及约束的行为如我所愿。但是,索引已成功创建。

我唯一担心的是它的工作原理,我把几乎任何值在第indexBy。我应该 什么样的价值?正如你所看到的,我给出了business_id值(索引列),但我不知道是否使用business_idbusiness__index(索引名称)。它可以工作,但我不明白是什么布莱恩:(

首先,我不认为你需要business__index定义在这里,因为它是一个外键,所以RDBMS无论如何将创建一个索引在这列。

第二件事是indexBy的选择。我不知道,如果你明白什么是它,这个选项是用于你的实体(PHP的水平)来创建一个indexed association,它并没有真正影响到DB模式

简而言之,如果您希望能够轻松地从集合中获取物品(您的情况为managers),则可以希望Doctrine以一种方式映射你的管理者,其中每个管理者的某个值是数组中的一个键(实际上是ArrayIterator),所以你可以像$this->managers[$someId]那样得到它。

由于定义的字段被用作关键字,所以显然你应该使用唯一的关键字。通常它是主键(你的情况为Manager::$id)。

没有这个,你需要遍历整个集合来找到一个具有特定id的经理。