Laravel文档说应该存储如下:
public function store(Request $request)
{
// Validate the request...
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
}
但是,为什么不这样做呢?
public function store(Request $request)
{
Flight::create($request->all());
}
上面的示例非常简单,因为它只有一个字段。但是我想对多个字段执行某些操作并不得不分配每个字段,而不是像第二个示例那样仅传递整个$ request,这很繁琐吗?
答案 0 :(得分:2)
第一个选项可让您更好地控制新模型中的内容。如果您存储请求中的所有内容,则用户可能会在store
方法中注入您不想为新模型存储的字段。
例如,您的航班的is_top_priority
列在Flight
模型中被声明为可填充,但是在创建新的航班时,您只想为航班设置name
(然后离开is_top_priority
为空,或者表中默认值为0)。如果您编写Flight::create($request->all());
,则用户可以注入<input name="is_top_priority" value="1">
并利用您的代码。
这就是为什么不建议使用fill($request->all())
的原因。使用$request->only(...)
或按照第一个示例中的说明手动分配每个需要的字段。
答案 1 :(得分:1)
例如,您的模型具有一些字段,例如名称,电子邮件,密码,状态等。 要求输入验证名称,电子邮件和密码,如果要执行以下操作:
Flight::create($request->all());
客户端可以发送其他字段状态,但是您可以手动更改状态。我这样做:
Flight::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => $request->get('password'),
'status' =>config('params.flight.status.not_active'),
]);