0

(更新) laravel-translatable パッケージを使用し、翻訳を含む行を挿入しようとしています。保存しようとすると、「文字列のメンバ関数 save() の呼び出し」というエラーが表示されます。

次のように、キーと値を使用してオブジェクトをループし"food": "Nourriture", 、ループ内で Translations テーブルを選択します。

$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();


 }

translate の代わりに translateOrNew を使用します。そうしないと、「空の値からデフォルト オブジェクトを作成しています」というエラーが発生するためです。

->save()それは文字列であり、本来あるべきモデルインスタンスではないため、メソッドを実行できないようです。だから私はこの行に何か問題があると思いますか?:

$translationKey = \App\Translation::select('group', 'key')->where('group', 
'global')->where('key', $key)->first();

しかし、問題は何ですか?

4

1 に答える 1

2

いくつかの間違いがありました - 個々の列ではなく行全体を選択する必要がありました:

$translationKey = \App\Translation::where('group', 'global')
->where('key', 'about_us')
->first();

また、翻訳を保存する際にミスがありました。私の translations_translations テーブルには「値」列があるため、これはうまくいきました:

$translationKey->translateOrNew($locale)->value = $value;
$translationKey->save()
于 2018-05-28T19:15:31.390 に答える