相信很多人就对这个问题很疑惑:
$model = new Model(); $mdoel->user_name = $userName;$mdoel->save();
其中的user_name是怎么给赋值上的呢?我以前也比较困惑,后来看看底层的相关代码,才拨开云雾。
打印过对象大家其实都知道里面有这个受保护的属性
[attributes:protected] => Array()
在实例化对象的时候,被继承的model类的构造函数会执行syncOriginal()方法,这个方法的作用其实就是初始化属性attributes到属性$original中。
当我们在对对象关联的表的字段赋值的时候,会采用$newModel->param=$paramValue;这个时候,其实调用的是Model里面的魔术方法__set();
给字段和字段值设置到attributes对象属性数组中。
然后在save的时候,会调用Illuminate\Database\Query\Builder->insert($value)方法,$value就是对应的$attributes.当然这个save也是预编译绑定变量的方式。