/**
* 新增自动完成定义
* @var array
*/
protected $insert = [];
这是模型内的属性 这个属性的作用就是在执行添加时应该干嘛,相对来说这个的作用可以说微乎其微的小并不是那么友好下面一段是我设置在 自己模型中的
// 设置新增插入时的默认值,既没有这些数据被输入时候,以下内容依然会被执行
protected $insert = [
'pid' => 0, 'level' => 1, 'status' => 2, 'sort' => 50, 'condition'=>1,
'note' =>'对该权限暂未说明',
];
这段代码的目的就是期望这些数据可以被默认执行然而问题在于当用户执行过程中这些值也被传入了则么办呢???
他们依然是强制的在执行,读完代码后发现这里是比较简陋的 我认为,应该是用户有数据的时候,其中用户已经传入的数据不应该被框架 $insert 属性所覆盖,而是使用用户传入的。
这样的作用就是 这个$insert属性内容可以被很高效的利用,而不再是仅仅为了解决时间添加而存在,
这样的结果就是 用户属于的与用户未输入的,就回变成一个整体,不再是覆盖方式,保证了的饱满状态,与默认状态,对于这点来说,数据库本身的效果就是这样,而我们做的却稍微差了这么一点点的一点点
/**
* 数据自动完成
* @access protected
* @param array $auto 要自动更新的字段列表
* @return void
*/
protected function autoCompleteData($auto = [])
{
// 处理在自动执行过程中,发生的用户传入内容被自动定义的覆盖问题
foreach ($auto as $field => $value)
{
if (array_key_exists($field,$this->data)) {
unset($auto[$field]);
}
}
foreach ($auto as $field => $value) {
if (is_integer($field)) {
$field = $value;
$value = null;
}
if (!isset($this->data[$field])) {
$default = null;
} else {
$default = $this->data[$field];
}
$this->setAttr($field, !is_null($value) ? $value : $default);
}
}
这是我做的处理与修改后的内容