2017-10-12 129 views
0

在學說(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(索引名稱)。它可以工作,但我不明白是什麼布萊恩:(

回答

1

首先,我不認爲你需要business__index定義在這裏,因爲它是一個外鍵,所以RDBMS無論如何將創建一個索引在這列。

第二件事是indexBy的選擇。我不知道,如果你明白什麼是它,這個選項是用於你的實體(PHP的水平)來創建一個indexed association,它並沒有真正影響到DB模式

簡而言之,如果您希望能夠輕鬆地從集合中獲取物品(您的情況爲managers),則可以希望Doctrine以一種方式映射你的管理者,其中每個管理者的某個值是數組中的一個鍵(實際上是ArrayIterator),所以你可以像$this->managers[$someId]那樣得到它。

由於定義的字段被用作關鍵字,所以顯然你應該使用唯一的關鍵字。通常它是主鍵(你的情況爲Manager::$id)。

沒有這個,你需要遍歷整個集合來找到一個具有特定id的經理。