1

I18Nカテゴリテーブルが必要です。私はjobeetの例に従いました。

以下のスキーマとフィクスチャのデータ。

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

これらのコマンドを実行すると、データベースにデータが挿入されず、エラーが表示された赤いボックスが表示されます。SQLSTATE[23000]:整合性制約違反:1062キー「PRIMARY」の重複エントリ「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までのクエリは正常に実行され、データが挿入されます。クエリ番号 7はデータを出力せず、nrを照会しません。8は失敗したものです。(ID 1がすでに存在するため、手順6で挿入します)。

問題はクエリ番号にあるはずです。7. "k.lang ='et_EE'"私はそれが'et'であるべきだとかなり確信していますか?なぜnrをクエリするのか。7は必要ですクエリnrとまったく同じようです。5しかし、値がない、および/または台無しになっていますか?

何を着たのですか、それともバグですか?

schema.yml

myCategory:
  として作用します:
    タイムスタンプ可能:〜
    並べ替え可能:〜
    I18n:
      フィールド:[名前、seeking_label、seeking]
      として作用します:
        だらしない:
          フィールド:[名前]
          uniqueBy:[lang、name]
          ビルダー:[mySluggableTranslit、urlize]
  列:
    名前:{タイプ:string(255)、notnull:true}
    性別:{タイプ:string(6)}
    seek_label:{タイプ:文字列(255)}
    シーク:{タイプ:文字列(255)}

data / Fixtures / category.yml

myCategory:
  カテゴリ1:
    性別女性
    位置:「1」
    翻訳:
      et:
        名前:'名前の値'
        seek_label:'ラベル値'
        シーク:'値'
4

3 に答える 3

2

デフォルトでは、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

于 2012-02-14T16:55:34.757 に答える
1

解決策を得ました:ソート可能な動作がI18nとうまく混ざっていません。

3日間のデバッグから身を守りたい場合は、Sortableの「csDoctrineActAsSortablePlugin」の動作とI18nの動作を混在させないでください。

とりあえず、ソート可能なサポートを削除します。I18nで動作する並べ替え可能な動作に関する推奨事項は大歓迎です。

于 2011-01-14T14:38:41.513 に答える
0

これは、一部の新しいDoctrineエクスプローラーに役立つ可能性があります。I18nクラスを識別するために使用されるID列は、自動インクリメントとして設定する必要がありますが、一意ではないように設定する必要があります。この一意の制約は変換テーブルに拡張されるため、フィクスチャが期待どおりに挿入されないためです。

例:

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

Genderテーブル(クラス)に自動インクリメントとしてのIDがあり、一意である場合、このフィクスチャの挿入は失敗します。したがって、変換テーブルのキーとして使用される自動インクリメントフィールドで一意を使用しないでください(I18nの動作)。

于 2011-02-02T17:41:13.150 に答える