2016-04-19 13 views
1

多言語にはdimsavを使用していますが、GUIDからステップバイステップでこの問題が発生しました。 (dimsavLaravel 5.2 multilsav/laravel-translatableを使用した多言語

私はモデルのカテゴリーがあります:私は、私はエラーを取得する特定の言語でこれを保存しようとする

use Illuminate\Database\Eloquent\Model; 
class CategoryTranslation extends Model { 
     public $timestamps = false; 
} 

とコントローラで:

use Illuminate\Database\Eloquent\Model; 
use Dimsav\Translatable\Translatable; 
class Category extends Model { 
     use Translatable; 
     public $translatedAttributes = ['name']; 
} 

CategoryTranslationを。これは私のコントローラです:

$language = App::getLocale(); 
$user = Auth::user(); 
$category = new Category(); 
$category->translate('en')->name = Input::get('name'); //line 35 
$category->save()) 

とエラー:

at HandleExceptions->handleError('2', 'Creating default object from empty value', 'C:\workspace\applications\wamp\www\lutz-paletten\app\Http\Controllers\CategoryController.php', '35', array('language' => 'en', 'user' => object(User), 'category' => object(Category))) in CategoryController.php line 35

PS:私は何をしないのです

Schema::create('categories', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('categoryId'); 
    $table->integer('user_id'); 
    $table->timestamps(); 
}); 

Schema::create('category_translations', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('category_id')->unsigned(); 
    $table->string('name'); 
    $table->string('locale')->index(); 

    $table->unique(['category_id','locale']); 
    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
}); 

:これは私の移行のですか? 私はこれを使用している場合は、それが動作:

$category->name = Input::get('name'); 
そして、それはAppLocaleとして設定されているものと一緒に保存されますが、どのように私は translate()でそれを使うことができますか?

答えて

0

あなたがこれを解決するかどうかは知らないが、私はあなたが物事のカップルに確認すべきだと思う: :Categoryオブジェクトを開始するとき、それはなりますので

の1-は括弧を削除$category = new Category;

2 -変更保存機能の後に余分な括弧は、それは次のようになりますので: $category->save();

3-入力の名前が正しいことを確認してください。

と私が見ることができるのは、あなたがすでに解決して欲しいということです。

ところであなたは$table->increments('id);がその役割を果たしているので、あなたの移行で
$table->integer('categoryId');がnessaryではないことをする必要はありません!コーディング:)

0

幸せあなたはカテゴリーの新しいレコードを作成する場合は、この最後の1が現在のロケール(デフォルト:EN)で記録が保存されます。

$category->translate('en')$category->getNewTranslation('en')または$category->translateOrNew('en')に変更するだけで、機能します。ご例えば

デフォルトロケール(設定/アプリでカテゴリを作成します。PHP ==>ロケール=> 'EN'):

public function createCategoryTranslation(Request $request, $id) 
{ 
    $category = Category::find($id) 

    // Solution 1 : If you want to explain the fields to be saved. 
    $category->getNewTranslation('en')->name = $request->input('name'); 

    // Solution 2 : Mass assignement if you have multiple fields to be saved. 
    $category->getNewTranslation('en')->fill($request); 

    $category->save() 
} 

アップデート翻訳:

public function updateCategoryTranslation(Request $request, $id) 
{ 
    $category = Category::find($id) 

    // Solution 1 : If you want to explain the fields to be saved. 
    $category->translate('en')->name = $request->input('name'); 

    // Solution 2 : Mass assignement if you have multiple fields to be saved. 
    $category->translate('en')->fill($request); 

    $category->save() 
} 

// CategoryController 
public function createCategory(Request $request) 
{ 
    // Save record in *categories* table 
    // And save the default language (config/app.php ==> locale) in *category_translations* table. 
    $category = new Category::create($request); 
} 

は、既存のカテゴリでの翻訳を作成します。 CreateOrUpdate翻訳:

public function createOrUpdateCategoryTranslation(Request $request, $id) 
{ 
    $category = Category::find($id) 

    // Solution 1 : If you want to explain the fields to be saved. 
    $category->translateOrNew('en')->name = $request->input('name'); 

    // Solution 2 : Mass assignement if you have multiple fields to be saved. 
    $category->translateOrNew('en')->fill($request); 

    $category->save() 
} 
関連する問題