如何在Laravel 5.5中自动将数据从请求模型映射到模型

时间:2017-12-11 03:06:37

标签: php laravel laravel-5


我想提交一份包含许多领域的表格 作为documentation

$flight = new Flight;
$flight->name = $request->name;
$flight->param1 = $request->param1;
$flight->param2 = $request->param2;
...
$flight->param_n = $request->param_n;
$flight->save();

如果有太多的字段,这是一个坏主意 我正在寻找任何类似的脚本:

$flight = new Flight;
$flight->save($request->all());

$request->all()函数有不必要的字段
什么是最好的方法?

2 个答案:

答案 0 :(得分:7)

只要您的模型属性与您的请求属性完全匹配,您就可以使用模型$fillable数组。

$flight = new Flight();
$data = $request->only($flight->getFillable());
$flight->fill($data)->save();

您需要为要使用此行为的任何模型指定可填写字段。

对于Laravel 5.4及更低版本使用intersect代替only

否则,您只需将请求中的属性列入白名单

即可
$data = $request->only(['param1', 'param2' ...]);

答案 1 :(得分:1)

  • 有各种方法。您可以将不需要的值排除为

    $ data = $ request->([' _token',' _method',' etc']);

  • 最好的方法是验证数据。 viz在服务器端的表单输入上应用验证。

    $ validated_data = $ request-> validate([' field1' =>' required',' field2' =>' required& #39;]);

等。您可以在每个字段上应用所需的验证,只有经过验证的字段将在$ validated_data变量中,然后您可以保存它们。