我有以下代码在数据库中创建一个条目:
$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 ...但它被转换为字符串。发生了什么事?
答案 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])
作为旁注,除非此代码只能由高度信任的经过身份验证的用户调用,否则您将面临巨大的安全问题