logo    奶牛CMS内容管理系统    最灵活的企业级免费开源电子商务系统软件!
首页 > 新闻列表 > 让你提高开发效率的查询技巧

让你提高开发效率的查询技巧

本文给大家不完全的整理了一些能够提高开发效率的查询技巧,希望能给你的开发工作带来更多的方便,不过也许有些技巧可能你已经了然于胸了,就当巩固学习了。

 

查询值为Null的数据

 

查询email为空,并且name不为空的用户数据
User::whereNull('email')
    ->whereNotNull('name')
    ->select();

 

多个字段同一个查询条件

 

快捷查询方式是一种多字段相同查询条件的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询,例如:

User::where('name|title','like','thinkphp%')
    ->where('create_time&update_time','>',0)
    ->find();

 

数组对象查询

 

如果你升级老版本的系统到5.1,由于数组查询方式的变化,而你又不希望全部换成表达式查询,那么可以使用数组对象查询。

$map = [
    'name'   => ['like', 'thinkphp%'],
    'title'  => ['like', '%think%'],
    'id'     => ['>', 10],
    'status' => 1,
];

$where          = new \think\db\Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];

User::where(new Where($map))
    ->whereOr($where->enclose())
    ->select();

enclose方法表示该查询条件两边会加上括号包起来。

 

使用快捷方法

 

对于一些常用的查询,系统封装了快捷查询方法,例如:

User::whereIn('id', [1,2,3])
    ->whereLike('name', 'think%')
    ->select();

相当于下面的查询

User::where('id', 'in', [1,2,3])
    ->where('name', 'like', 'think%')
    ->select();

 

获取字段值和列数据

 

对于一些简单的数据获取,你完全不需要查询整个表的数据,例如查询某个字段(满足条件的)值或者列数据。

// 获取id为10的用户名称
User::where('id', 10)
    ->value('name');
// 获取状态为1的用户名称列表
User::where('status', 1)
    ->column('name');
// 获取分数大于80的用户分数列表,以用户ID为索引
User::where('score', '>', 80)
    ->column('score', 'id');

 

JSON查询

 

如果你的字段类型使用的是JSON类型,那么可以直接使用框架提供的JSON查询支持。

User::where('info->nickname', 'ThinkPHP')
    ->find();

 

动态查询

 

使用动态查询可以进一步简化你的查询条件,不过缺点是可能无法做到IDE的自动提示了,例如:

// 根据邮箱(email)查询用户信息
User::whereEmail('thinkphp@qq.com')
    ->find();

// 根据昵称(nick_name)查询用户
User::whereNickName('like', '%流年%')
    ->select();
    
// 根据邮箱查询用户信息
User::getByEmail('thinkphp@qq.com');
    
// 根据昵称(nick_name)查询用户信息
User::getByNickName('流年');
    
// 根据邮箱查询用户的昵称
User::getFieldByEmail('thinkphp@qq.com', 'nick_name');
    
// 根据昵称(nick_name)查询用户邮箱
User::getFieldByNickName('流年', 'email');
联系我们
点击这里给我发消息
点击这里给我发消息
联系我们