Symfony doctrine non-charge des données sur le comportement i18n: Intégrité violation de contrainte

StackOverflow https://stackoverflow.com/questions/4690681

Question

Je veux avoir tho table catégories I18N. J'ai suivi l'exemple jobeet .

données du schéma ci-dessous. et fixtures

./symfony doctrine:build --db --all-classes --and-migrate
./symfony doctrine:data-load data/fixtures/category.yml

Quand je lance ces commandes aucune donnée est insérée dans la base de données et la boîte rouge avec des écrans d'échec: SQLSTATE [23000]: Intégrité violation de contrainte: 1062 entrée en double « 1 et » pour la touche « primaire »

Les requêtes qui sont exécutées sur la tâche de charge de données (connecté avec "mysqld --log = fichier journal"):

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 

Quand je lance manuellement ces commandes sur la base de données nouvellement construite. Les requêtes de 3 à 6 ci-dessus course fine et insérer les données. nr requête. 7 ne pas les données de sortie et n ° de requête. La figure 8 est une défaillance. (Parce id 1 existe déjà, inséré à l'étape 6).

Le problème doit être dans la requête nr. 7. « k.lang = « et_EE » » Je suis sûr qu'il devrait être « et »? Pourquoi requête nr. 7 neccessaire semble exactement comme requête nr. 5 mais sans et / ou foiré valeurs?

Ce que j'ai obtenu worng ou est-ce 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'
Était-ce utile?

La solution 2

solution obtenue: le comportement Sortable ne se mélange pas bien avec I18n.

Si vous voulez vous sauver de 3 jours de débogage alors ne pas mélanger Triables comportement « csDoctrineActAsSortablePlugin » avec le comportement I18n.

Je vais laisser tomber le soutien sortable pour l'instant. Toute reccomendations pour Sortable bahavior qui fonctionne avec I18n est la bienvenue.

Autres conseils

Par défaut, la longueur du champ de la culture dans les tables i18n est 2. Vous devez changer à 5 si vous voulez utiliser des codes longs de culture. Dans le cas contraire, 'et_EE' sera tronquée à 'et'.

I18n:
  fields:       [name, seeking_label, seeking]
  length: 5

Voir: http: // www. doctrine-project.org/documentation/manual/1_0/en/behaviors#core-behaviors:i18n

Cela pourrait aider quelques nouveaux explorateurs Doctrine: colonnes d'identification, utilisés pour identifier les classes I18n doivent être définies comme autoincrement mais jamais comme unique, car cette contrainte unique sera étendue aux tables de traduction, donc les appareils ne seront pas insérés comme prévu .

Dans l'exemple:

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 table de genre (classe) et a id comme autoincrement, et unique, cette insertion de fixation échouerait. Donc, ne pas utiliser unique dans les champs, autoincrement utilisés comme clés dans les tables de traduction (comportement I18n).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top