Laravel 5.2: dimsav 在非对象上调用成员函数 translateOrNew()
Laravel 5.2: dimsav Call to a member function translateOrNew() on a non-object
我正在使用
Laravel 5.2
包 dimsav laravel-可翻译 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 );
遇到错误
Call to a member function translateOrNew() on a non-object
任何帮助请帮助我在这里做错了。
编辑:
我的关于模特
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'];
}
在批量赋值版本中,您使用
获取数组
$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();
只需创建一个模型对象,使用它的功能,然后保存它。
您忘记在模型中包含以下内容 class。
在您的模型文件中使用 \Dimsav\Translatable\Translatable;
,它位于此处:\App\Article.php
我正在使用 Laravel 5.2 包 dimsav laravel-可翻译 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 );
遇到错误
Call to a member function translateOrNew() on a non-object
任何帮助请帮助我在这里做错了。
编辑:
我的关于模特
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'];
}
在批量赋值版本中,您使用
获取数组$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();
只需创建一个模型对象,使用它的功能,然后保存它。
您忘记在模型中包含以下内容 class。
在您的模型文件中使用 \Dimsav\Translatable\Translatable;
,它位于此处:\App\Article.php