我正在使用 Laravel 5.2 包装dimsav laravel-translatable 6。*
这是我工作的控制器
$about = new About();
$about->link = $request->link;
$about->save();
$localization = $request['localization'];
//dd($localization);
// check if locales arabic and english only
$locales = array_keys($localization);
foreach ($locales as $locale) {
if (!in_array($locale, array('en', 'ar'))) {
Session::flash('message', 'Lang Error');
return Redirect::back();
}
}
foreach ($localization as $locale => $parameters) {
$about->translateOrNew($locale)->title = $parameters['title'];
$about->translateOrNew($locale)->details = $parameters['details'];
}
$about->save();
但是当我尝试使用质量分配时
$input = $request->all();
$localization = $input['localization'];
// check if locales arabic and english only
$locales = array_keys( $localization );
foreach ( $locales as $locale ) {
if ( ! in_array( $locale, array( 'en', 'ar' ) ) ) {
Session::flash( 'message', 'Lang Error' );
return Redirect::back();
}
}
foreach ( $localization as $locale => $parameters ) {
$input->translateOrNew( $locale )->title = $parameters['title'];
$input->translateOrNew($locale)->details = $parameters['details'];
}
dd($input);
About::create( $input );
出错了
在非对象
上调用成员函数translateOrNew()
任何帮助,请问我在这里做错了什么。
修改:
我的模特
use Dimsav\Translatable\Translatable;
use Illuminate\Database\Eloquent\Model;
class About extends Model {
use Translatable;
public $translatedAttributes = [ 'title', 'details' ];
protected $fillable = [ 'link' ];
}
my abouttranslation model
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class AboutTranslation extends Model
{
public $timestamps = false;
protected $fillable = ['title', 'details', 'about_id'];
}
答案 0 :(得分:2)
在您的质量分配版本中,您将使用
获取数组$input = $request->all();
您希望在该数组上使用函数translateOrNew()
,因为该数组没有任何功能,因此该函数无效。您必须从其他地方调用该函数并使用create保存数组。我举一个简单的例子:
$input = $request->all();
$localization = $input['localization'];
// check if locales arabic and english only
$locales = array_keys( $localization );
foreach ( $locales as $locale ) {
if ( ! in_array( $locale, array( 'en', 'ar' ) ) ) {
Session::flash( 'message', 'Lang Error' );
return Redirect::back();
}
}
$input = array();
foreach ( $localization as $locale => $parameters ) {
$input[About::translateOrNew( $locale )->title] = $parameters['title'];
$input[About::translateOrNew($locale)->details] = $parameters['details'];
}
About::create( $input );
我必须承担很多事情,因为我不知道About
模型是怎样的。另外,我假设此模型中有一个静态方法translateOrNew()
。请提供有关您的脚本的更多信息,这将改善答案。
<强>更新强>
第二个想法,为什么不使用这个更简单的方法呢?
<?php
$input = $request->all();
$localization = $input['localization'];
// check if locales arabic and english only
$locales = array_keys( $localization );
foreach ( $locales as $locale ) {
if ( ! in_array( $locale, array( 'en', 'ar' ) ) ) {
Session::flash( 'message', 'Lang Error' );
return Redirect::back();
}
}
$model_about = new About();
$input = array();
foreach ( $localization as $locale => $parameters ) {
$model_about->translateOrNew($locale)->title = $parameters['title'];
$model_about->translateOrNew($locale)->details = $parameters['details'];
}
$model_about->save();
只需创建一个模型对象,使用它的功能并在之后保存它。
答案 1 :(得分:-1)
您忘记在模型类中包含以下内容。
在模型文件中使用\Dimsav\Translatable\Translatable;
,位于以下文件中:\App\Article.php