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