Я уверен, что проблема с ошибками в дублирующихся строках, но если вы хотите сохранить пустые строки (или null
s), вам нужно будет включить 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
и вы хотите удалить перевод на французский язык для поля 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);
Примеры не проверены, но вы поймете идею.