Symfony 2.1中的Doctrine:多列上的字段,列和索引

时间:2013-03-05 19:54:42

标签: symfony doctrine yaml symfony-2.1

我对symfony2和doctrine很新,我最近遇到了一些我无法解决的索引问题。

这是我的经历。你知道:

Test\PersoBundle\Entity\Experience:
type: entity
repositoryClass: Thibanir\PersoBundle\Repository\ExperienceRepository
table: experience
indexes:
    exp: 
        columns: [slug,company_id,begin_date,end_date,is_current]
        type: unique
id:
    id:
        type: integer
        generator: { strategy: AUTO }
fields:
    type:
        type: string
        length: 255
    begin_date:
        type: datetime
    end_date:
        type: datetime
        nullable: true
    is_current:
        type: boolean
        default: false
    title:
        type: string
        length: 255
    description:
        type: text
    slug:
        type: string
        length: 255
manyToOne:
    company:
        targetEntity: Company
        inversedBy: companies
        joinColumn:
            name: company_id
            referencedColumnName: id

当我查看mysql中生成的索引时,我可以看到它,但Unique标志设置为False

当我查看创建索引的doctrine documentation时,我在语法上看到的唯一区别是我将关键字FieldsColumns反转。我这样做是因为我在tutorial中学到了它。

如果我尝试将两个关键字反转以匹配此语法:

indexes:
    exp: 
        fields: [slug,company_id,begin_date,end_date,is_current]
        type: unique
id:
    id:
        type: integer
        generator: { strategy: AUTO }
columns:        
    type:
        type: string
        length: 255s:
    [...]

当我发出php app/console doctrine:schema:update --force时,我收到以下错误:

[ErrorException]                                              
Notice: Undefined index: columns in /home/test/Project/perso/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php line 199  

以下是我的两个问题:

  1. Doctrine中的字段和列之间有什么区别(I 在他们的网站上找不到答案)?
  2. 如何在多列上创建唯一索引?
  3. 非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

字段和列之间的差异 Field是实体中属性的名称。 Column是SQL表中列的名称。例如,

createdAt:
      type: datetime
      column: created_at

此处,实体中的属性名称将被创建,并且与该实体对应的SQL表中的列名称将为created_at。如果未指定列,则SQL表中的列名称将与属性名称相同。在这种情况下,createdAt。

要在多列上创建唯一索引,请指定

unique:true

为每个字段。 例如:

socialId:
  type: bigint
  column: social_id
  unique: true

playerId:
  type: bigint
  column: player_id
  unique: true