我正在使用dimsav进行多语言,我从guid一步一步地解决了这个问题。 (dimsav)
我有一个模型类别:
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;
}
在Controller中,当我尝试使用特定语言保存时,我收到错误。这是我的控制者:
$language = App::getLocale();
$user = Auth::user();
$category = new Category();
$category->translate('en')->name = Input::get('name'); //line 35
$category->save())
错误:
at HandleExceptions-> handleError('2','从中创建默认对象) 空值', 'C:\工作空间\应用\瓦帕\ WWW \鲁兹-PALETTEN \应用\ HTTP \控制器\ CategoryController.php', '35',数组('language'=>'en','user'=> object(User),'category'=> 对象(类别)))在CategoryController.php第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 :(得分:0)
我不知道你是否解决了这个问题,但我认为你应该检查一下:
1 - 在启动Category对象时删除圆括号,使其变为:
$category = new Category;
2 - 在保存功能之后更改额外的括号,因此它将是:
$category->save();
3 - 确保您的输入正确命名。
这就是我所能看到的,希望你已经解决了:)。
是的,你不需要那个 迁移中的$table->integer('categoryId');
不是必需的,因为$table->increments('id);
正在扮演这个角色!
快乐的编码:)
答案 1 :(得分:0)
如果您创建了一个类别的新记录,则最后一个记录将使用您当前的区域设置保存记录(默认值:en)。
您只需按$category->translate('en')
或$category->getNewTranslation('en')
更改$category->translateOrNew('en')
即可。
对于你的例子:
使用默认语言环境创建一个类别(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);
}
在现有类别中创建翻译:
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()
}
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()
}