• 重识TP5中模型


    创建一个表MODEL,下面展现代码片段:

    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
        `name` varchar(30) NOT NULL DEFAULT '' COMMENT '名称',
    
        `pid` int unsigned NOT NULL DEFAULT 0 COMMENT '父级ID',
        `tid` int unsigned NOT NULL DEFAULT 0 COMMENT '顶级ID',
        `tree` varchar(255) NOT NULL DEFAULT '' COMMENT '层级树(,1,2,)',
    
        `status` tinyint(1) unsigned NOT NULL DEFAULT 1 COMMENT '状态',
        `sort` int unsigned NOT NULL DEFAULT 100 COMMENT '排序',
        `is_top` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '是否顶置',
        `create_ts` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',
        `update_ts` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '修改时间',
        `create_user` int unsigned NOT NULL DEFAULT 0 COMMENT '创建用户',
        `update_user` int unsigned NOT NULL DEFAULT 0 COMMENT '修改用户',
        `remark` text COMMENT '详情描述(json)',
    
        PRIMARY KEY (`id`),

    添加一条数据的时候,只初始化赋值的值,对于未赋值的值(除ID外)会抛出类的属性不存在异常

            $a = new AutoTypeModel();
            $a->data(['name'=>'hehe','tree'=>'tree']);
            echo "
    ";
            echo $a->name; // hehe
            echo "
    ";
            echo $a->tree; // tree
            echo "
    ";
            echo $a->save(); // 1
            echo "
    ";
            echo $a->id; // 41
            echo "
    ";
            echo $a->create_ts; // 类的属性不存在:appautomodelAutoTypeModel->create_ts
            echo "
    ";
            echo $a->update_ts; // 类的属性不存在:appautomodelAutoTypeModel->update_ts
            echo "
    ";
            echo $a->pid; // 类的属性不存在:appautomodelAutoTypeModel->pid
            exit;

    注意:如果开启自动写入时间戳字段,那么会自动赋值到 create_ts,update_ts,就不会抛出这两个字段的异常啦!

        // 开启自动写入时间戳字段
        protected $autoWriteTimestamp = true;
        // 定义时间戳字段名
        protected $createTime = 'create_ts';
        protected $updateTime = 'update_ts';

    那么换种方式:

            $a = new AutoTypeModel();
            $a->data(['name'=>'hehe','tree'=>'tree']);
            $a->pid = 3;
            echo "
    ";
            echo $a->name; // hehe
            echo "
    ";
            echo $a->tree; // tree
            echo "
    ";
            echo $a->save(); // 1
            echo "
    ";
            echo $a->id; // 52
            echo "
    ";
            echo $a->create_ts; // 2018-12-19 16:54:40
            echo "
    ";
            echo $a->update_ts; // 2018-12-19 16:54:40
            echo "
    ";
            echo $a->pid; // 3
            exit;

    修改一条数据:

            $a = AutoTypeModel::get(20);
    //        $a->id = 20;
            $a->name = "oo2";
            echo "
    ";
            echo $a->name;
            echo "
    ";
            echo $a->tree;
            echo "
    ";
            echo $a->id;
            echo "
    ";
            echo $a->create_ts;
            echo "
    ";
            echo $a->update_ts;
            echo "
    ";
            echo $a->pid;
            echo "
    ";
            echo $a->save();
            exit;

    OR

            // 闭包修改
            $a = AutoTypeModel::get(function ($query){
                $query->where('id',20);
            });
    //        $a->id = 20;
            $a->name = "oo1";
            echo "
    ";
            echo $a->name;
            echo "
    ";
            echo $a->tree;
            echo "
    ";
            echo $a->id;
            echo "
    ";
            echo $a->create_ts;
            echo "
    ";
            echo $a->update_ts;
            echo "
    ";
            echo $a->pid;
            echo "
    ";
            echo $a->save();
            exit;

    同时修改多条数据,如下写法请注意只能修改一条数据哦,证明 new Model 的时候只对一条或者一行数据有效

            // 闭包修改
            $a = AutoTypeModel::get(function ($query){
                $query->whereIn('id','20,21,22');
            });

    那么可以将 new Model 想象成数据库的一条数据对它操作把,如果要操作多条数据,那么可以 new Model 多次

            $a = AutoTypeModel::get(20);
            $b = AutoTypeModel::get(21);
            $c = AutoTypeModel::get(22);
            $name = "oo";
            $a->name = $name;
            $b->name = $name;
            $c->name = $name;
            echo "
    ";
            echo $a->save(); // 1
            echo "
    ";
            echo $b->save(); // 1
            echo "
    ";
            echo $c->save(); // 1
            exit;

    当然也可以使用:

           $a = new AutoTypeModel;
            echo "
    ";
            echo $a->save(['name'=>'aaaa'],['id'=>['in','20,21,22']]); // 3
            exit;
  • 相关阅读:
    引用kernel32.dll中的API来进行串口通讯
    vs2017 项目生成时不产生xml文件的方法
    session的处理机制
    用户未登录或Session超时时重定向到登录页,不那么简单
    VS C# debug文件夹中各文件的作用
    Tomcat(免安装版)的安装与配置【转】
    关于C#关闭窗体后,依旧有后台进程在运行的解决方法
    DatakeyNames和datakey
    ASP.NET页面生命周期描述
    比较C#中几种常见的复制字节数组方法的效率
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/10144534.html
Copyright © 2020-2023  润新知