模板 自定义view文件夹 中间件 路由和路由函数 自定义多个route文件 session无效 自定义多个公共函数 中间件别名和数据库连接 伪静态 自定义类库extends 以年月日+编号拼接id,且编号每天从0开始 跨域 宝塔面板新建网站403 网页包含过多重定向 缓存 路由绑定子域名 方法参数错误 php导出excel时身份证变成科学技术法 获取路由参数 生成二维码phpqrcode 使用腾讯OCR(扫描) thinkphp6微信支付回调不访问 查询构造器 导入导出excel:安装使用 导入导出Excel:按日期导出 tp6腾讯云短信 thinkphp unserialize(): Error chinese-calendar 将base64保存到本地

查询构造器

首页 > PHP > Thinkphp6 更新日期:2022-08-10 11:21:53

关联查询

// 关联查询 
Db::table('table') 
->alias('a') 
->join('table2 b', 'a.Id=b.aId) 
->join('table3 c', 'a.cId=c.Id) 
->select()->toArray();

// 关联查询,查询指定字段 
Db::table('table') 
->alias('a') 
->join('table2 b', 'a.Id=b.aId) 
->join('table3 c', 'a.cId=c.Id) 
->field('a.name, b.name, c.name') 
->select()->toArray(); 

// 关联查询,多表中有重复字段,解决方法,使用as,为其临时改名 
Db::table('table') 
->alias('a') 
->join('table2 b', 'a.Id=b.aId) 
->join('table3 c', 'a.cId=c.Id) 
->field('a.name, b.name as b_name, c.name as c_name') 
->select()->toArray();

限制结果数查询

// 限制结果数量 limit(从索引几开始,查询几个),如果只传入一个参数,则代表返回该参数个数的数据,比如20,则输出20条数据
Db::table('table')
->limit(0,10)
->select()
->toArray();

// 限制结果数量 page(第几页,查询几个),比如page(1,10),就是第一页,返回10个,如果是page(2,10),就是第二页,返回10个
Db::table('table')
->page(1,10)
->select()
->toArray();

分页查询

// 后端
$list = Db::table('table')
->paginate(18);

// 前端
{volist name='list' id='item'}
    <p>{$item["name"]}</p>
{/volist}
{$list|raw}

新增

// 新增,并返回新增条数,通常情况,成功返回1
Db::table('table')
->insert([    
    'name'=>'李某',    
    'age'=>30
]);

// 新增,并返回新增数据的主键
Db::table('table')
->insertGetId([    
    'name'=>'李某',    
    'age'=>30
]);

更新(修改)

// 方式一
Db::table('table')
->where('id','=',10)
->update([    
    'age'=>29
]);

// 方式二
Db::table('table')
->where([    
    'id'=>10,    
    'createTime'=>'2021-4-22 15:19'
]);

一般查询

use think\facade\Db;

// 查询所有
Db::table('table')
->select()
->toArray();

// 查询单个字段
Db::table('table')
->field('字段名')
->select()
->toArray();

// 查询多个字段
Db::table('table')
->field('字段1,字段2')
->select()
->toArray();

// 与where配合
Db::table('table')
->where('id', '=', 15)
->field('字段1, 字段2')
->select()
->toArray();

// 排序-单个条件
Db::table('table')
->order('createTime', 'DESC')
->select()
->toArray();

// 排序-多个条件
Db::table('table')
->order(['createTime','Id'=>'DESC'])
->select()
->toArray();

模糊查询

Db::table('table')
->where('name', 'like', '%www.ty2333.cn%')
->select()
->toArray();

数据去重distinct(true)

Db::table('think_user')
->distinct(true)
->field('user_login')
->select();

单字段多条件查询

$user_order_form = Db::table('user_order_form')
->whereOr([                
    [                       
        ['openid', '=', $openid],                       
        ['select_time', '=', date('Y-m-d', time())],                       
        ['state', '=', 1]                
    ],[                       
        ['openid', '=', $openid],                       
        ['select_time', '=', date('Y-m-d', time())],                       
        ['state', '=', 2]                
    ]
])->select()->toArray();

上面例子中,同一个字段state,可判断为1或者为2的条件。 之所以每个数组,都要将其它数组的相同字段一起写上,是因为每次判断,都得是三个字段一起判断,如果某个数组少写了要判断的字段,哪怕在判断该数组的state时,就会忽略比如openid或者select_name字段,从而导致查出不准确的数据。


标题导航