質問

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は失敗したものです。 (ID 1が既に存在するため、ステップ6に挿入されています)。

問題はQuery 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) }

データ/フィクスチャー/category.yml

myCategory:
  category-1:
    gender: female
    position: '1'
    Translation:
      et:
        name: 'Name value'
        seeking_label: 'Label value'
        seeking: 'Value'
役に立ちましたか?

解決 2

GOTソリューション:ソート可能な動作は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クラスを識別するために使用されるいくつかの新しいDoctrine Explorers:ID列をAutoincrementとして設定する必要がありますが、このユニークな制約は翻訳テーブルに拡張されるため、予想どおりにフィクスチャを挿入しません。

例:

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