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 中插入)。

问题必须在查询 nr 中。7. "k.lang = 'et_EE'" 我很确定应该是 'et'?为什么要查询 nr。7 is neccessary 似乎与查询 nr 完全一样。5 但没有和/或混乱的价值观?

我已经磨损了还是它是一个错误?

架构.yml

我的类别:
  充当:
    时间戳:~
    可排序:~
    I18n:
      字段:[名称,寻找标签,寻找]
      充当:
        可击杀:
          字段:[名称]
          uniqueBy:[语言,名称]
          生成器:[mySluggableTranslit,urlize]
  列:
    名称:{类型:字符串(255),notnull:真}
    性别:{类型:字符串(6)}
    寻找标签:{类型:字符串(255)}
    寻求:{类型:字符串(255)}

数据/夹具/category.yml

我的类别:
  第一类:
    性别女
    位置:'1'
    翻译:
      等:
        名称:'名称值'
        seek_label: '标签值'
        寻求:“价值”
4

3 回答 3

2

By default, the lenght of the culture field in i18n tables is 2. You have to change it to 5 if you want to use long culture codes. Otherwise, 'et_EE' will be truncated to 'et'.

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

See: 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 explorer:用于标识 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 回答