Laravel 批量赋值(Mass Assignment)是什么意思?为何会如此设计?

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

如题。

摈弃世俗浮躁,追求技术精湛
Summer
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

方便直接把请求发来的数据以数组形式丢进去创建数据。

免去了一个一个赋值,或者循环赋值的麻烦。

2年前 评论
laravel_peng
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、内部逻辑是
  1. Laravel 提供了保护 Mass-Assignment 的方法,那就是在模型上定义 fillableguarded 的属性。 fillable:
    class User extend Model
    {
    protected $fillable = ['name', 'email', 'password'];
    }
    guarded:
    class User extend Model
    {
    protected $guarded = ['is_admin'];
    }
  2. 这样在执行 create() 方法时, Eloquent 模型会先使用 fill() 方法对数据进行过滤,去掉 $fillable 中以外的字段,或去掉 $guarded 中的字段,来保证只获得预期的表单字段。这就是 Laravel 的 Mass-Assignmen 批量赋值。
4、这样设计的好处
  1. 提高了代码的优雅程度,批量赋值减少代码量。
  2. 方便了赋值字段管理。
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!