我正在使用TranslateBehavior,并且效果很好。但是,存在删除翻译的问题。 我有一个问题,如果i18n表中存在空字符串,则返回空字符串,这很有意义。我设置
allowEmptyTranslations => false
flag,它解决了问题,但又创建了另一个。我现在无法删除翻译。我尝试将字段留空或节省单个空间。第一种技术根本不更改任何字段,另一种确实保存了,但是后来我无法将空间更改为其他任何内容。如果我尝试输入新值,则会直接从数据库中得到重复的行错误,因此,我假设如果只有一个空格,则未设置实际字段(Translate必须将其视为空)。因此,似乎allowEmptyTranslations可同时用于保存和检索。
简而言之,有人知道删除翻译的方法吗?
答案 0 :(得分:0)
我注意到您的重复行错误问题是关于什么的,但是如果您想实际保存空字符串(或null
),则必须启用allowEmptyTranslations
,如果需要,可以立即执行此操作。
这是一个简单而肮脏的示例,其中$table
是附加了翻译行为的表对象,而$entity
是您要为其保存翻译的实体:>
// ...
$translateBehavior = $table->behaviors()->get('Translate');
$allowEmptyTranslations = $translateBehavior->getConfig('allowEmptyTranslations');
$translateBehavior->setConfig('allowEmptyTranslations', true);
$result = $table->save($entity);
// ...
$translateBehavior->setConfig('allowEmptyTranslations', $allowEmptyTranslations);
或者,您也可以删除翻译条目,这里$entity
是您要为其删除翻译的实体,假设它属于名为ArticlesTable
的表类,并且您d要删除title
字段的法语翻译:
$translateBehavior = $table->behaviors()->get('Translate');
$translationTable = $translateBehavior->getTableLocator()->get(
$translateBehavior->getConfig('translationTable')
);
$translationEntity = $translationTable
->find()
->where([
'foreign_key' => $entity->id,
'model' => 'Articles',
'field' => 'title',
'locale' => 'fr_FR',
])
->firstOrFail();
$result = $translationTable->delete($translationEntity);
示例未经测试,但您明白了。