在学说(Symfony)中,我在两个实体之间有一个1-n的关系:一个经理拥有n个企业。
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?
关系的作用以及约束的行为都符合我的意愿。然而,索引已成功创建。
我唯一关心的是条款indexBy
,它几乎适用于我所投入的任何价值。
我应该使用什么价值?如您所见,我提供了business_id
值(索引列),但我不知道是使用business_id
还是business__index
(索引名称)。无论哪种方式都有效,但我不明白其中的内容:(
答案 0 :(得分:3)
首先,我不认为你需要business__index
定义,因为它是一个外键,所以无论如何RDBMS都会在这个列上创建一个索引。
第二件事是indexBy
选项。我不确定你是否明白它的用途。此选项用于在实体中创建indexed association(在PHP级别)。它并没有真正影响数据库架构。
简而言之,如果您希望能够轻松地从集合中获取项目(在您的案例中为managers
),您可能希望Doctrine以某种方式映射您的经理,其中每个经理的某些价值是数组中的键(实际上是ArrayIterator
),所以你可以像$this->managers[$someId]
那样得到它。
由于定义的字段用作键,因此您应该使用唯一的字段。通常是它的主键(在你的情况下为Manager::$id
)。
如果没有这个,您需要遍历整个集合以查找具有特定ID的经理。