批改状态:未批改
老师批语:
10个常用的查询构造器
关键点:所有的读操作,返回的都是一个二维数组,在使用的时候需要foreach遍历,失败则返回空数组;写操作返回受到影响的条目数,失败返回0;不推荐在最终查询命令中传参,最好将各种查询条件在查询构造器中分解,最终查询命令只进行查询不分担条件
实例
<?php
namespace app\index\controller;
use think\Db;
class query{
public function find(){
//1.table() 指定要查询的表名,name()可以达成同样目的且可以自动过滤表名前缀,但在database.php配置中表前缀prefix设置为空,因此只用table()就可以达到要求
//2.find() 查询满足条件的数据,但只返回第一条
$res = Db::table('staff')->find(4);//如果以主键为查询条件,可以直接在find中传参
dump($res);
//3.查询条件可以在where命令中填写,避免在最后的find命令中传参
//where(字段名,表达式,查询条件)是where的基本结构,其中表达式如果是相等,则可以省略
$res = Db::table('staff')
->where('staff_id','=','4')
->find();
dump($res);
//4.查询指定的字段使用field(),field参数可以是字符串,也可以是数组,使用数组的好处是可以另行指定字段的别名便于区分,相当于SQL语句中的as
$res = Db::table('staff')
//->field('name,sex,salary')//字符串
//->field(['name','sex','salary'])//索引数组
->field(['name'=>'姓名','sex'=>'性别','salary'=>'工资'])//关联数组
->where('staff_id','4')
->find();
dump($res);
}
public function select(){
//5.查询满足条件的多条记录用select()
//6.order实现排序,desc降序,asc升序
//7.limit限制显示的条数
$res = Db::table('staff')
->field(['name'=>'姓名','salary'=>'工资'])
->where('salary','>','3000')
->order('salary','desc')
->limit(3)
->select();
dump($res);
}
public function insert(){
//8.插入一条数据insert()
$data = [
'name' => '胡二刀',
'sex' => 0,
'age' => 49,
'salary' => 5300
];
$num = Db::table('staff')->insert($data);
//insert插入成功后直接获取id的getLastInsID二合一操作命令insertgetId替换insert
//$num = Db::table('staff')->insertgetId($data);
//返回上一条执行成功语句的id
$id = Db::getLastInsID();
return $id?'插入成功,id='.$id :'插入失败';
//插入多条数据insertAll
$data = [
['name' => '张飞','sex' => 0,'age' => 48,'salary' => 6900],
['name' => '刘备','sex' => 0,'age' => 58,'salary' => 4500],
['name' => '关羽','sex' => 0,'age' => 53,'salary' => 4700],
];
$num = Db::table('staff')->insertAll($data);
return $num?'插入成功'.$num.'条数据' :'插入失败';
//为避免在最终方法中传参,使用data()方法打包数据
$num = Db::table('staff')->data($data)->insertAll();
return $num?'插入成功'.$num.'条数据' :'插入失败';
}
public function update(){
//9.更新操作update,必须基于前置查询操作,模板不允许无条件更新
$num = Db::table('staff')
->where('salary','<=','5000')
//用字符串描述表达式,用到了salary的原始值,引用Db::raw()方法
->data(['salary'=>Db::raw('salary+1000')])
->update();
//直接根据主键更新
$num = Db::table('staff')->update(['sex'=>1,'staff_id'=>13]);
return $num ? $num.'条数据被更新':'更新失败';
}
public function delete(){
//10.删除操作delete(),一般不直接使用删除操作,而是软删除,即用update更新操作代替delete操作,毕竟用户数据非常难得
//删除操作同样基于前置查询,不允许无条件删除
$num = Db::table('staff')->delete(19);
//多个主键同时传入
$num = Db::table('staff')->delete([1,3,5]);
$num = Db::table('staff')->where('salary','>','7000')->delete();
//删除表的全部数据
//$num = Db::table('staff')->delete(true);
}
}
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号