讨论数量:
1、一般情况下通过这种方式提交表单,新建一个用户:
public function store (Request $request)
{
$user = new \App\User;
// 逐个赋值
$user->name = $request->name;
$user->email = $request->email;
$user->password = bcrypt($request->password);
// 新建一个用户
$user->save();
}
2、为了方便,可以使用 $request->all()
获取用户提交的所有数据。
public function store (Request $request)
{
$user = new \App\User;
// Mass-Assignment 批量赋值
$data = $request->all();
// 新建一个用户
$user->create($data);
}
3、内部逻辑是
- Laravel 提供了保护 Mass-Assignment 的方法,那就是在模型上定义
fillable
或guarded
的属性。 fillable:
guarded:class User extend Model { protected $fillable = ['name', 'email', 'password']; }
class User extend Model { protected $guarded = ['is_admin']; }
- 这样在执行
create()
方法时, Eloquent 模型会先使用fill()
方法对数据进行过滤,去掉 $fillable 中以外的字段,或去掉 $guarded 中的字段,来保证只获得预期的表单字段。这就是 Laravel 的 Mass-Assignmen 批量赋值。
4、这样设计的好处
- 提高了代码的优雅程度,批量赋值减少代码量。
- 方便了赋值字段管理。
推荐文章: