Symfony Doctrine I18N Поведение поведение. Недостаточная нагрузка: нарушение ограничения целостности

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

Вопрос

Я хочу, чтобы я имел таблицу категорий i18n. Я следовал Jobeet Пример.

Схема и приспособления данных ниже.

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

Когда я запускаю эти команды, данные не вставляются в базу данных и красную коробку с отображением сбоев: SQLState [23000]: нарушение ограничений целостности: 1062 Дубликат «1-ET» для ключа «Первичный»

Запросы, которые выполняются на задаче загрузки данных (вошли в систему с "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 это неудачный. (Потому что идентификатор 1 уже существует, вставлен на шаге 6).

Проблема должна быть в запросе nr. 7. "k.lang = 'et_ee'" Я уверен, что это должно быть "et"? Почему запрос NR. 7 является необходимым, кажется, точно так же, как запрос NR. 5, но без и/или испорченных значений?

Что меня носили или это ошибка?

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/Mainchures/Category.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 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, должны быть установлены как автоинскрущение, но никогда не столь уникальны, потому что это уникальное ограничение будет расширено до таблиц перевода, поэтому приспособления не будут вставлены, как ожидалось.

В примере:

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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top