2016-04-19 22 views
1

Ich benutze Dimsav für mehrsprachige und ich habe dieses Problem nach Schritt für Schritt aus der Guid. (dimsav)Laravel 5.2 multilanguage mit dimsav/laravel-übersetzbar

Ich habe ein Modell Kategorie:

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

A CategoryTranslation:

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

Und in-Controller, wenn ich versuche das ich einen Fehler mit einer bestimmten Sprache zu speichern. Das ist mein Controller:

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

Und Fehler:

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: Das ist meine Migration:

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'); 
}); 

Was bin ich? Wenn ich diese verwenden, funktioniert es:

$category->name = Input::get('name'); 

Und es wird mit gespeichert werden, was als AppLocale gesetzt ist, aber wie kann ich es mit translate()?

Antwort

0

Ich weiß nicht, ob Sie diese oder nicht gelöst, aber ich glaube, Sie mit ein paar Dinge überprüfen sollten:

1- löschen Sie die Klammern, wenn das Category-Objekt initiiert, so wird es,: $category = new Category;

2- ändern sie die zusätzlichen Klammern nach der Funktion speichern, so wird es sein: $category->save();

3- stellen Sie sicher, dass Ihre Eingabe richtig benannt ist.

und das ist alles, was ich sehen kann, hoffe, dass Sie bereits gelöst :).

BTW brauchen Sie nicht, dass
$table->integer('categoryId'); in der Migration nicht nessary ist seit $table->increments('id); ist, diese Rolle zu spielen!

glücklich Codierung :)

0

Wenn Sie einen neuen Datensatz der Kategorie erstellen, diese letzte spart Datensatz mit Ihrem aktuellen Locale (Standard: en).

Sie müssen nur ändern $category->translate('en') von $category->getNewTranslation('en') oder $category->translateOrNew('en') und es funktioniert!

Für Ihr Beispiel:

Erstellen einer Kategorie mit Standardgebietsschema (config/app.php ==> locale => 'en'):

// 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); 
} 

Erstellen einer Übersetzung in einer vorhandenen Kategorie:

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() 
} 

-Update eine Übersetzung:

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() 
} 

CreateOrUpdate Übersetzung:

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() 
}