TP5中CURD那点事儿(三)

2018-05-07  本文已影响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);这种方法需要传主键
上一篇下一篇

猜你喜欢

热点阅读