Symfony学说I18N行为数据负载失败:违反完整性约束
-
11-10-2019 - |
题
我想要有I18N类别表。我遵循了 JobEet示例.
模式和固定数据以下数据。
./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml
当我运行这些命令时 SQLSTATE [23000]:违反完整性约束:1062重复条目'1-ET'key'Primary'
在数据加载任务上执行的查询(使用“ 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的查询运行良好并插入数据。查询nr。 7不输出数据并查询NR。 8是失败的。 (因为ID 1已经存在,因此已插入步骤6)。
问题必须是在查询NR中。 7.“ k.lang ='et_ee'”我很确定应该是'et'吗?为什么查询nr。 7是NECESSARY似乎完全像查询NR。 5但是没有和/或混乱的值?
我遇到的东西还是一个错误?
模式
myCategory: actAs: Timestampable: ~ Sortable: ~ I18n: fields: [name, seeking_label, seeking] actAs: Sluggable: fields: [name] uniqueBy: [lang, name] builder: [mySluggableTranslit, urlize] columns: name: { type: string(255), notnull: true } gender: { type: string(6) } seeking_label: { type: string(255) } seeking: { type: string(255) }
数据/固定装置/类别.yml
myCategory: category-1: gender: female position: '1' Translation: et: name: 'Name value' seeking_label: 'Label value' seeking: 'Value'
解决方案 2
获得解决方案:可排序行为与I18N的混合不佳。
如果您想从3天的调试中保存自己,请不要将可排序的“ Csdoctrineactassortableplugin”行为与I18N的行为混合在一起。
我现在就放弃可排序的支持。欢迎对与I18N合作的可排序的巴哈维尔的任何建议。
其他提示
默认情况下,I18N表中的文化领域的Lenght为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
这可以帮助一些新的学说探索者:用于识别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
如果性别表(类)具有自动插入和唯一的ID,则此固定插入将失败。因此,请勿在自动启动字段中使用唯一的用作翻译表中的键(I18N行为)。