使用call_user_func_array动态创建Model :: create会在Laravel 5.2上产生错误

时间:2016-08-03 14:30:50

标签: php laravel-5.2

我有以下代码在数据库中创建一个条目: $element_names_array = explode(',', $request->input('element_names')); foreach ($element_names_array as $element) { $data[$element] = $request->input($element); } $model = '\\App\\' . $request->input('connected_model'); return call_user_func_array($model . '::create', $data);

创建一个数组并将其传递给call_user_func_array函数,该函数触发Model::create()方法将数组作为参数传递。

但是,出于某种原因,在call_user_func_array()数组类型转换为字符串类型之后。

我收到此错误和错误日志:

Type error: Argument 1 passed to Illuminate\Database\Eloquent\Model::create() must be of the type array, string given

错误日志

in Model.php line 570 at Model::create('R200500002', 'MALSKDJSNAM123123') at call_user_func_array('\App\RepairOrder::create', array('ro_number' => 'R200500002', 'vin_number' => 'MALSKDJSNAM123123')) in GdmsBotTask.php line 26

正如您所注意到的,数组被传递给call_user_func_array ...但它被转换为字符串。发生了什么事?

1 个答案:

答案 0 :(得分:1)

call_user_func_array将数组转换为单独的参数。

要修复,请在父数组中使用call_user_func或包裹$data

return call_user_func($model . '::create', $data)
return call_user_func_array($model . '::create', [$data])

作为旁注,除非此代码只能由高度信任的经过身份验证的用户调用,否则您将面临巨大的安全问题