我具有用于保存一对多模型的创建功能, 模型可以成功,但是当孩子成功时, 我不知道为什么显示错误消息
方法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;
}
答案 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()
。