zoukankan      html  css  js  c++  java
  • 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景

    thinkphp作为国内现阶段最成熟的框架;没有之一;

    不得不说是有好些特别方便的方法的;

    然而如果初接触thinkphp的时候难免会被搞的有点迷茫;

    for example这些:

    getBy

    getField

    getFieldBy

    我曾在相当一段时间内都用的迷迷糊糊的;

    直到后来把它们总结如下:

    咱先虚拟一张表出来

    +----+--------+--------------+
    | id | name   | avatar              |
    +----+--------+--------------+
    |  1 | 白俊遥  | bjy.jpg             |
    |  2 | 帅白     | shuaibai.jpg     |
    |  3 | test      | shuaibai.jpg     |
    +--+-------+----------------+

    一:现在我们要获取姓名为 白俊遥 的这条数据;

    常规情况是这样写的;

    $data=M('Test')->where(array('name'=>'白俊遥'))->find()

    如果用getby的话就可以简化为

    $data=M('Test')->getByName('白俊遥');//通过name字段获取整条数据
    $data=M('Test')->getByAvatar('bjy.jpg')//同理可得如果想通过avatar获取整条数据就是这样写了
    $data=M('Test')->getById(1);//聪明的童鞋立即就想到了如果要通过id那不就是这样?对;
                                //但是如果id是主键的话;这里有个更好用的方法
    $data=M('Test')->find(1);//得到的结果和M('Test')->getById(1);是一样的
    打印值:
    Array
    (
        [id] => 1
        [name] => 白俊遥
        [avatar] => bjy.jpg
    )

    官方详细文档:http://document.thinkphp.cn/manual_3_2.html#dynamic_query

    总结就是说;getBy后边是要跟一个字段的;

    我们也发现了;上面获取到的都是整条整条的数据;

    二:然而实际开发中;很多时候我们是想通过用户名:白俊遥 找到他的头像:bjy.jpg;

    这时候就是getFieldBy的应用场景了;

    常规情况是这样写的;

    $data=M('Test')->field('avatar')->where(array('name'=>'白俊遥'))->find();
    $avatar=$data['avatar'];

    如果用getField的话可以简化为:

    $avatar=M('Test')->where(array('name'=>'白俊遥'))->getField('avatar');

    如果getFieldBy那简化的更残忍了:

    $avatar=M('Test')->getFieldByName('白俊遥','avatar');
    打印$avatar:
    bjy.jpg

    官方详细文档:http://document.thinkphp.cn/manual_3_2.html#dynamic_query

    总结就是说getFieldBy后面跟一个字段括号内有两个参数;第一个跟Field对应的条件;第二个是要取的字段;

    三:通过头像名 shuaibai.jpg 获取使用这个头像的用户名 帅白、test

    常规是这样写的:

    $data=M('Test')->field('name')->where(array('avatar'=>'shuaibai.jpg'))->select();
    $name_array=array_column($data, 'name');

    如果getField的话就可以简化为:

    $avatar_array=M('Test')->where(array('avatar'=>'shuaibai.jpg'))->getField('name',true);
    打印$avatar_array:
    Array
    (
        [0] => 帅白
        [1] => test
    )

    官方详细文档:http://document.thinkphp.cn/manual_3_2.html#read_data 

    总结就是说:getField是需要自己写where的;传的第一个参数就是需要获取的字段;

    如果只获取一条值的时候不需要传第二个参数;如果有多个的话;则第二个参数传true;

    更详细的用法偷个懒直接复制官方文档了:

    读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。

    示例如下:

    $User = M("User"); // 实例化User对象
    // 获取ID为3的用户的昵称 $nickname = $User->where('id=3')->getField('nickname');

    默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。

    如果需要返回整个列的数据,可以用:

    $User->getField('id',true); // 获取id数组
    //返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值

    如果传入多个字段的话,默认返回一个关联数组:

    $User = M("User"); // 实例化User对象
    // 获取所有用户的ID和昵称列表 $list = $User->getField('id,nickname');
    //两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组,
    以id的值为key,nickname字段值为value

    这样返回的list是一个数组,键名是用户的id字段的值,键值是用户的昵称nickname。

    如果传入多个字段的名称,例如:

    $list = $User->getField('id,nickname,email');
    //返回的数组格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value))
    是一个二维数组,key还是id字段的值,但value是整行的array数组,
    类似于select()方法的结果遍历将id的值设为数组key

    返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。

    如果我们传入一个字符串分隔符:

    $list = $User->getField('id,nickname,email',':');

    那么返回的结果就是一个数组,键名是用户id,键值是 nickname:email的输出字符串。

    getField方法还可以支持限制数量,例如:

    $this->getField('id,name',5); // 限制返回5条记录
    $this->getField('id',3); // 获取id数组 限制3条记录

    可以配合使用order方法使用。更多的查询方法可以参考查询语言章节。

    认真写一篇博客真心不容易;写着写着就熬到了凌晨1点了;但愿能让童鞋们少走一些弯路;也算不枉这么辛苦的码字;

    白俊遥博客

    本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客http://www.baijunyao.com                        

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5492207.html
Copyright © 2011-2022 走看看