thinkphp5.1模型insert属性建议 使用其他几个更新属性

浏览:439 发布日期:2018/10/24
/**
     * 新增自动完成定义
     * @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);
        }
    }
这是我做的处理与修改后的内容
评论(
后面还有条评论,点击查看>>