I want tho have I18N categories table. I have followed the jobeet example.
Schema and fixtures data below.
./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml
When I run these commands no data gets inserted into database and red box with failure displays: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-et' for key 'PRIMARY'
Queries that get executed on data-load task (logged with "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
When I manually run these commands on freshly built database. Queries from 3 to 6 above run fine and insert data. Query nr. 7 does not output data and query nr. 8 is the failing one. (Because id 1 already exists, inserted in step 6).
The problem must be in query nr. 7. "k.lang = 'et_EE'" I'm pretty sure it should be 'et'? Why query nr. 7 is neccessary seems exactly like query nr. 5 but without and/or messed up values?
What I have gotten worng or is it a bug?
schema.yml
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) }
data/fixtures/category.yml
myCategory: category-1: gender: female position: '1' Translation: et: name: 'Name value' seeking_label: 'Label value' seeking: 'Value'
By default, the lenght of the culture field in i18n tables is 2. You have to change it to 5 if you want to use long culture codes. Otherwise, 'et_EE' will be truncated to 'et'.
I18n:
fields: [name, seeking_label, seeking]
length: 5
See: http://www.doctrine-project.org/documentation/manual/1_0/en/behaviors#core-behaviors:i18n
Got solution: Sortable behavior is not mixing well with I18n.
If you want to save yourself from 3 days of debugging then don't mix Sortable "csDoctrineActAsSortablePlugin" behavior with I18n behavior.
I'll just drop sortable support for now. Any reccomendations for Sortable bahavior that works with I18n is welcome.
This could help some new Doctrine explorers: ID columns, used to identify I18n classes should be set as autoincrement but never as unique, because this unique constraint will be expanded to the translation tables, so fixtures won't be inserted as expected.
In example:
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
If the Gender table (class) has and id as autoincrement, and unique, this fixture insertion would fail. So don't use unique in autoincrement fields, used as keys in translation tables (I18n behavior).
精彩评论