美文网首页
TP5中CURD那点事儿(三)

TP5中CURD那点事儿(三)

作者: 铁匠简记 | 来源:发表于2018-05-07 11:46 被阅读14次
    查某行某列的值
        $name = Db::name('data')
            ->where('id',16)
            ->value('name');
    查某列值
        $name = Db::name('data')
            ->where('status',1)
            ->column('name');
            ->find();查一行
    
    查出id键名 name值名 键值对
        $list = Db::name('data')
            ->where('status',1)
            ->column('name','id');
    
    查id为键名的数据集
        $list = Db::name('data')
            ->where('status',1)
            ->column('id','*');
    
    聚合查询
        count()    max()   min()   avg()   sum()   没什么特殊的
    
    推荐使用方法
        where("id > :id and name like :name",['id'=>10,'name'=>'%php%']);
        whereTime('reg_time','>','2016-01-01');晚于此日,自动转换时间
        whereTime('reg_time','>','this week'); 默认一周从周一开始计
        whereTime('reg_time','>','-2 days');最近两天
        whereTime('reg_time','between',['2016-1-1','2017-1-1'])  在此中间的一天
        where('reg_time','today'); 可以是yestoday、week、last week
    
    
    分块查询
        Db::name('data')
            ->where('status','>',0)
            ->chunk(2,function($list){
                foreach($list as $data){
                    //每次查两条
                    //多次连接数据库
                }
            });
        以上优化后如下//可在trace中查看sql
        $p = 0;
        do{
            $result = Db::name('data')
                ->limit($p,2)->select();
            $p +=2;
        }while(count($result) > 0);
    
    
    模型和关联
    
        Model类名 对应表名
        属性对应字段省略表前缀,
        表名                     类名
        tp_user                User.php
        tp_user_level          UserLevel
        $user = User::get(1);用模型名字根据主键查记录
    
        如果Model类名和表名不一致
        protected $name = 'admin' 换真表名不带前缀
        protected $table = 'tp_account_log'  带前缀
    
    新增
        在控制器直接new的时候,需要建相应的model(空的都行)并且引入(use)一下
        $user = new User;   注意是new的对象而不是静态查询的结果集对象
        $user -> email = '30292510@qq.com';
        $user -> mobile = '13097730978';
        $user -> save();  //这个save()方法是Model层的父类中的方法,想用就得use 相应Model
        下同
        $user = new User;   注意是new的对象而不是静态查询的结果集对象
        $a = [
            'email' => '30292510@qq.com',
            mobile => '13097730978',
        ];
        $user -> create($a);
    
    批量新增
        $user = new User;   注意是new的对象而不是静态查询的结果集对象
        $list = [
            ['email' => '31292510@qq.com',mobile => '13097730978'],
            ['email' => '3029250@qq.com',mobile => '13597730978'],
            ['email' => '3292510@qq.com',mobile => '17997730978'],
        ];
        $user -> saveAll($list);
    
    
    查询
        控制器中操作,需要use对应的Model类
        $user = User::get(1);
        echo $user->email;对象形式调用
        echo $user->mobile;
        echo $user['email'];数组形式也可以
        也可以getbyXxx()方法(不是主键字段也可用) 返回对象/数组
        $user = getbyMobile('13097731972');
        $user = getbyEmail('30292510@qq.com');
        也可以传入数组
        User::get(['name'=>'libai']);
        User::where('mobile','13097731972');
        User::where(['mobile'=>'13097731972','name'=>'lisa']);
    
    
        这里讲一下save()方法,对于save()方法,
        $user = Userr::get(1);静态方法返回的对象调用save()为update()操作,因为$user在调用save()前会先去查询记录
        $user -> isUpdate(false) -> save();  这样就是insert操作了;
        $user = new User,new出来的对象调用save()方法为insert方法,
    
    更新
        $user['mobile'] = '13097731972';
        $user['email']  = '30292510@qq.com';
        User::update($user,['userid',1]);
    
    删除
        $user = User::get(1);
        $user->delete();
    
        User::destroy(1);这种方法需要传主键
    

    相关文章

      网友评论

          本文标题:TP5中CURD那点事儿(三)

          本文链接:https://www.haomeiwen.com/subject/rdpmrftx.html