2016-04-19 3 views
1

Я использую dimsav для многоязычного языка, и у меня есть эта проблема после выполнения шаг за шагом от guid. (dimsav)Laravel 5.2 многоязычный с dimsav/laravel-translatable

У меня есть модель Категория:

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

CategoryTranslation:

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

И в контроллер, когда я пытаюсь сохранить это с определенным языком, я получаю сообщение об ошибке. Это мой контроллер:

$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

Я не знаю, если вы решили эту проблему или нет, но я думаю, вы должны проверить с несколькими вещами:

1- удалить круглые скобки при инициализации объекта Category так будет: $category = new Category;

2- Изменить дополнительные Скобки после функции сохранения, так что будет: $category->save();

3- убедитесь, что ваш ввод назван правильно.

и все, что я вижу, надеюсь, что вы решили уже :).

BTW вам не нужно, что
$table->integer('categoryId'); в вашей миграции не nessary поскольку $table->increments('id); играет эту роль!

счастливым кодирования :)

0

Если вы создаете новый рекорд категории, этот последний сохраняет запись с текущей локали (по умолчанию: еп).

Вам необходимо изменить $category->translate('en') на $category->getNewTranslation('en') или $category->translateOrNew('en'), и он работает!

Для примера:

Создать категорию с локалью по умолчанию (конфигурации/приложения.PHP ==> локалью => 'ан'):

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

Создать перевод в существующей категории:

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 перевод:

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 translation:

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