Symfony 学说 i18n 行为数据加载失败:违反完整性约束
Posted
技术标签:
【中文标题】Symfony 学说 i18n 行为数据加载失败:违反完整性约束【英文标题】:Symfony doctrine i18n behavior data-load failure: Integrity constraint violation 【发布时间】:2011-01-14 11:45:11 【问题描述】:我想要 I18N 类别表。我关注了jobeet example。
架构和固定装置数据如下。
./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml
当我运行这些命令时,没有数据被插入到数据库中,并且红色框显示失败:SQLSTATE[23000]:完整性约束违规:1062 键“PRIMARY”的重复条目“1-et”
在数据加载任务上执行的查询(使用“mysqld --log=logfile”记录):
1 Query DELETE FROM my_category
2 Query START TRANSACTION
3 Query SELECT k.id AS k__id, k.position AS k__position FROM my_category k ORDER BY k.position desc LIMIT 1
4 Query INSERT INTO my_category (gender, position, created_at, updated_at) VALUES ('female', '1', '2011-01-14 12:33:05', '2011-01-14 12:33:05')
5 Query SELECT k.id AS k__id, k.lang AS k__lang, k.slug AS k__slug FROM my_category_translation k WHERE (k.slug LIKE 'name-value%' AND k.lang = 'et' AND k.name = 'Name value')
6 Query INSERT INTO my_category_translation (id, lang, name, seeking_label, seeking, slug) VALUES ('1', 'et', 'Name value', 'Label value', 'Value', 'name-value')
7 Query SELECT k.id AS k__id, k.lang AS k__lang, k.slug AS k__slug FROM my_category_translation k WHERE (k.slug LIKE '%' AND k.lang = 'et_EE' AND k.name IS NULL)
8 Query INSERT INTO my_category_translation (id, lang, slug) VALUES ('1', 'et_EE', '')
9 Query rollback
10 Quit
当我在新建的数据库上手动运行这些命令时。上面 3 到 6 的查询运行良好并插入数据。 查询编号。 7 不输出数据和查询nr。 8是失败者。 (因为 id 1 已经存在,在第 6 步中插入)。
问题一定出在查询 nr 中。 7. "k.lang = 'et_EE'" 我很确定应该是 'et'? 为什么要查询 nr。 7 is neccessary 似乎与查询 nr 完全一样。 5 但没有和/或混乱的价值观?
是我弄坏了还是有问题?
schema.yml
我的类别: 充当: 时间戳:~ 可排序:~ I18n: 字段:[名称,寻找标签,寻找] 充当: 可击杀: 字段:[名称] uniqueBy:[语言,名称] 生成器:[mySluggableTranslit,urlize] 列: 名称:类型:字符串(255),notnull:真 性别:类型:字符串(6) 寻找标签:类型:字符串(255) 寻求:类型:字符串(255)data/fixtures/category.yml
我的类别: 第一类: 性别女 位置:'1' 翻译: 等: 名称:'名称值' seek_label: '标签值' 寻求:“价值”【问题讨论】:
【参考方案1】:默认情况下,i18n 表中文化字段的长度为 2。 如果要使用长文化代码,则必须将其更改为 5。否则,'et_EE' 将被截断为 'et'。
I18n:
fields: [name, seeking_label, seeking]
length: 5
见:http://www.doctrine-project.org/documentation/manual/1_0/en/behaviors#core-behaviors:i18n
【讨论】:
【参考方案2】:得到了解决方案:可排序行为与 I18n 不能很好地混合。
如果您想免于 3 天的调试,请不要混用 具有 I18n 行为的可排序“csDoctrineActAsSortablePlugin”行为。
我现在只放弃可排序的支持。欢迎对适用于 I18n 的可排序行为提出任何建议。
【讨论】:
【参考方案3】:这可以帮助一些新的 Doctrine explorer:用于标识 I18n 类的 ID 列应设置为自动增量,但永远不要设置为唯一,因为此唯一约束将扩展到转换表,因此不会按预期插入固定装置.
例如:
Gender:
female:
Translation:
en:
short_name: F
name: Female
es:
short_name: F
name: Femenino
male:
Translation:
en:
short_name: M
name: Male
es:
short_name: M
name: Masculino
如果 Gender 表(类)具有和 id 作为自动增量且唯一的,则此夹具插入将失败。所以不要在自动增量字段中使用 unique ,用作转换表中的键(I18n 行为)。
【讨论】:
以上是关于Symfony 学说 i18n 行为数据加载失败:违反完整性约束的主要内容,如果未能解决你的问题,请参考以下文章