laravel Collection :: saveMany不存在

时间:2019-06-06 03:24:33

标签: laravel laravel-5

我具有用于保存一对多模型的创建功能, 模型可以成功,但是当孩子成功时, 我不知道为什么显示错误消息

  

方法Illuminate \ Database \ Eloquent \ Collection :: saveMany不   存在。

相关代码

模型

class CarType extends Model {
public function cars() {
    return $this->hasMany(Car::class);
}
}
class Car extends Model {
public function type() {
    return $this->belongsTo(CarType::class);
}
}

控制器

public function store(Request $request, FormBuilder $formBuilder) {
    $form = $formBuilder->create($this->_formModel);
    // Valid
    if (!$form->isValid()) {
        return redirect()->back()->withErrors($form->getErrors())->withInput();
    }
    //get form input
    $inputs = FromMethod::getFormValue($form);

    $model = new CarType();

    //process
    $insert = (new MstProcess)->insertModel($model, $inputs , Car::class , 'cars');
    if(!$insert){
        return redirect()->route( 'admin.systemError');
    }
}

MstProcess

public function insertModel($model, $inputs ,$childClass = '' ,$childFiled = '') {
    DB::beginTransaction();
    try {
        $model->fill($inputs);
        $model->save();
        if($childClass != '' && array_key_exists($childFiled , $inputs ) ){
            $childs = $this->insertModelChild($childClass , $inputs[$childFiled]);
            $model->$childFiled->saveMany($childs);
        }

        DB::commit();
        return true;
    } catch (\Exception $e) {
        Log::debug('insertModel ' . $e);
        DB::rollback();
        return false;
    }
}

public function insertModelChild($childClass, $childsInputs) {
    $childs = [];
    foreach ($childsInputs as $i => $ary_childInputs) {
        $childModel = new $childClass();
        $childModel->fill(ary_childInputs);
        $childs[] = $childModel;
    }
    return $childs;
}

1 个答案:

答案 0 :(得分:3)

那是因为您正在集合上而不是模型上运行saveMany()方法。

控制器:

$insert = (new MstProcess)->insertModel($model, $inputs , Car::class , 'cars');

最后一个参数是$childFiled,因此此行$model->$childFiled->saveMany($childs);基本上转换为$model->cars->saveMany($childs);

$model->cars返回一个集合。您必须使用$model->cars()