我对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时,我在语法上看到的唯一区别是我将关键字Fields
和Columns
反转。我这样做是因为我在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
以下是我的两个问题:
非常感谢你的帮助
答案 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