Symfony fallimento comportamento dottrina i18n data-load: violazione del vincolo di integrità
-
11-10-2019 - |
Domanda
Voglio tho avere tabella categorie I18N. Ho seguito il jobeet esempio .
schema e le fixture dei dati sottostanti.
./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml
Quando eseguo questi comandi non dati vengono inseriti nel database e casella rossa con display guasto: SQLSTATE [23000]: Integrità violazione del vincolo: 1.062 voce duplicata '1-et' per la chiave 'primaria'
Le query che vengono eseguiti sul compito data-load (registrato con "mysqld --log = file di log"):
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
Quando eseguo manualmente questi comandi sulla base di dati appena costruiti. Le query da 3 a 6 di cui sopra bella corsa e inserire i dati. nr Query. 7 fa dati non uscita e interrogazione nr. 8 è quello malfunzionante. (Poiché id 1 esiste già, inserito nel passaggio 6).
Il problema deve essere nella query nr. 7. "k.lang = 'et_EE'" Sono abbastanza sicuro che dovrebbe essere 'et'? Perché interrogazione nr. 7 è neccessary sembra esattamente come interrogazione n. 5 ma senza e / o incasinato valori?
Quello che ho ottenuto worng o è un 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'
Soluzione 2
soluzione Got: comportamento ordinabili non si mescola bene con I18n.
Se si vuole salvare se stessi da 3 giorni di debug, allora non si mescolano Ordinabile comportamento "csDoctrineActAsSortablePlugin" con un comportamento I18n.
mi limiterò a drop ordinabili per ora. Eventuali RACCOMANDAZIONI PER ordinabili bahavior che funziona con I18n è il benvenuto.
Altri suggerimenti
Per impostazione predefinita, la lunghezza del campo della cultura nelle tabelle i18n è 2. Devi cambiare a 5 se si desidera utilizzare i codici della cultura lunghi. In caso contrario, 'et_EE' verrà troncato a 'et'.
I18n:
fields: [name, seeking_label, seeking]
length: 5
See: http: // www. doctrine-project.org/documentation/manual/1_0/en/behaviors#core-behaviors:i18n
Questo potrebbe aiutare alcuni nuovi esploratori Doctrine: colonne ID, usati per identificare le classi I18n deve essere impostato come auto-incremento, ma mai come unico, perché questo vincolo unico sarà esteso alle tabelle di conversione, quindi non verranno inserite infissi come previsto .
Nel esempio:
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
Se la tabella di genere (classe) ha e id come AutoIncrement, e unico, questo inserimento apparecchio fallirebbe. Quindi non utilizzare unico in campi autoincremento, usati come chiavi in ??tabelle di conversione (comportamento I18n).