(Обновлено) Я использую переводимый пакет laravel и пытаюсь вставить строки с переводами. При попытке сохранения выдает ошибку «вызов функции-члена save () on string».
Я зацикливаю объект с ключами и значениями, например: "food": "Nourriture",
и внутри цикла я делаю выбор из таблицы переводов:
$translationKey = \App\Translation::select('group', 'key')->where('group',
'global')->where('key', $key)->first();
Я не делаю точно так, как документация, которая была бы:
$translationKey = \App\Translation::where('key', $key)->first();
Разница в том, что я выбираю столбцы «группа» и «ключ», и делаю дополнительное «где», чтобы указать, что группа = глобальная. Там что-то не так?
Затем я пытаюсь проверить, существует ли уже существующий перевод. Если нет, я вставляю перевод:
if($translationKey->hasTranslation('fr')) {
continue;
}else{
//insert
$translationRow = $translationKey->translateOrNew('fr')->$key = $value;
$translationRow->save();}
Я использую translateOrNew вместо translate, потому что в противном случае я получаю ошибку: «Создание объекта по умолчанию из пустого значения».
Кажется, я не могу сделать ->save()
метод, потому что это строка, а не экземпляр модели, какой она должна быть. Так что я думаю, что-то не так с этой строкой?
$translationKey = \App\Translation::select('group', 'key')->where('group',
'global')->where('key', $key)->first();
Но в чем проблема?
У меня были некоторые ошибки — мне нужно было выбрать всю строку вместо отдельных столбцов:
$translationKey = \App\Translation::where('group', 'global')
->where('key', 'about_us')
->first();
И были ошибки при сохранении перевода. Моя таблица translations_translations имеет столбец «value», так что это сработало:
$translationKey->translateOrNew($locale)->value = $value;
$translationKey->save()
Других решений пока нет …