Symfony falta de comportamiento doctrina i18n datos de carga: Integridad violación de restricción
-
11-10-2019 - |
Pregunta
quiero aunque tienen mesa de categorías I18N. He seguido el jobeet ejemplo .
esquema y accesorios datos de más abajo.
./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml
Al ejecutar estos comandos no hay datos se inserta en la base de datos y el cuadro rojo con errores se mostrará: SQLSTATE [23000]: violación de integridad: 1062 Entrada duplicada '1-et' para la tecla 'primaria'
Las consultas que se ejecutan en la tarea de datos de carga (conectado con "mysqld --log = archivo de registro"):
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
Al ejecutar manualmente estos comandos en la base de datos recién construido. Las consultas de 3 a 6 anteriores fina de ejecución y de inserción de datos. nr consulta. 7 Por qué los datos no salida y NR consulta. 8 es el que falla. (Debido ID 1 ya existe, insertado en el paso 6).
El problema debe estar en consulta nr. 7. "k.lang = 'et_EE'" Estoy bastante seguro de que debería ser 'y'? ¿Por consulta nr. 7 es neccessary parece exactamente igual nr consulta. 5 pero sin y / o en mal estado valores?
Lo que he conseguido worng o es un error?
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'
Solución 2
solución conseguida: Comportamiento Sortable no está mezclando bien con I18n.
Si quiere ahorrarse de 3 días de depuración entonces no se mezclan Sortable comportamiento "csDoctrineActAsSortablePlugin" con el comportamiento I18n.
Yo sólo dejará caer el apoyo se puede ordenar por ahora. Cualquier reccomendations para Sortable bahavior que funciona con I18n es bienvenido.
Otros consejos
Por defecto, la longitud del campo de la cultura en las tablas i18n es 2. Usted tiene que cambiarlo a 5 si desea utilizar los códigos de la cultura largos. De lo contrario, 'et_EE' se truncará a 'et'.
I18n:
fields: [name, seeking_label, seeking]
length: 5
Ver: http: // www. doctrine-project.org/documentation/manual/1_0/en/behaviors#core-behaviors:i18n
Esto podría ayudar a algunos de los nuevos exploradores Doctrina: columnas ID, que se utiliza para identificar las clases I18n debe establecerse como autoincrement pero nunca como único, debido a esta restricción única se ampliará a las tablas de traducción, por lo que aparatos no van a ser insertados como se esperaba .
En el ejemplo:
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
Si la tabla de Género (clase) tiene y el ID como autoincrement, y único, esta inserción accesorio fallaría. Así que no use único en campos autoincrement, utilizados como claves en las tablas de traducción (comportamiento I18n).