1

我对 symfony2 和教义还很陌生,最近遇到了一个我无法修复的索引问题。

这是我的经验.yml:

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

当我查看有关创建索引的教义文档时,我看到的语法的唯一区别是我反转了关键字Fieldsand Columns。我这样做是因为我在本教程中学到了它。

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

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 中的字段和列有什么区别(我在他们的网站上找不到答案)?
  2. 如何在多个列上创建唯一索引?

非常感谢你的帮助

4

1 回答 1

0

字段和列的区别字段是实体中属性的名称。Column 是 SQL 表中列的名称。例如,

createdAt:
      type: datetime
      column: created_at

这里,实体中的属性名将被createdAt,而该实体对应的SQL表中的列名将被created_at。如果不指定列,则 SQL 表中的列名将与属性名相同。在这种情况下,createdAt。

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

unique:true

对于每个字段。例子:

socialId:
  type: bigint
  column: social_id
  unique: true

playerId:
  type: bigint
  column: player_id
  unique: true
于 2013-09-27T09:04:41.327 回答