十三、其他查询方法(重点:where方法)
1、where方法(查询语法)
见手册--数据库--查询构造器--查询语法
where('字段名','表达式','查询条件');whereOr('字段名','表达式','查询条件');
表达式 | 含义 |
---|
EQ、= | 等于(=) |
NEQ、<> | 不等于&#xff08;<>&#xff09; |
GT、> | 大于&#xff08;>&#xff09; |
EGT、>&#61; | 大于等于&#xff08;>&#61;&#xff09; |
LT、< | 小于&#xff08;<&#xff09; |
ELT、<&#61; | 小于等于&#xff08;<&#61;&#xff09; |
LIKE | 模糊查询 |
[NOT] BETWEEN | &#xff08;不在&#xff09;区间查询 |
[NOT] IN | &#xff08;不在&#xff09;IN 查询 |
[NOT] NULL | 查询字段是否&#xff08;不&#xff09;是NULL |
[NOT] EXISTS | EXISTS查询 |
EXP | 表达式查询&#xff0c;支持SQL语法 |
> time | 时间比较 |
|
between time | 时间比较 |
notbetween time | 时间比较 |
注&#xff1a;where方法中&#xff0c;如果比较表达式是等于&#xff0c;可以省略这个参数。
应用示例&#xff1a;
$info &#61; User::where(&#39;id&#39;,&#39;&#61;&#39;,&#39;1&#39;)->find();$info &#61; User::where(&#39;id&#39;,&#39;1&#39;)->find();$info &#61; User::where(&#39;name&#39;,&#39;like&#39;,&#39;%thinkphp%&#39;)->select();
注意&#xff1a;使用了where方法后&#xff0c;查询数据可以使用find方法和select方法&#xff0c;不能使用get方法和all方法。&#xff08;原因&#xff1a;where方法返回的是Query对象&#xff0c;不是模型对象&#xff09;
扩展&#xff1a;批量条件查询&#xff08;手册-数据库-查询构造器-高级查询&#xff09;
2、连贯操作&#xff08;链式操作&#xff09;
&#xff08;见手册--数据库--查询构造器--链式操作&#xff09;
原理&#xff1a;中间调用的方法&#xff0c;返回值是对象&#xff0c;可以继续调用对象的其他方法。
一条sql语句的组成可以很复杂&#xff0c;里边有where、order by、group by、限制查询的字段、limit、having限制条件等等&#xff0c;这些复杂的条件在tp框架中都有封装
注&#xff1a;TP框架中&#xff0c;中间的方法没有顺序要求&#xff0c;当时用于获取最终结果的find和select等方法&#xff0c;必须在最后。
常用链式操作方法
$model &#61; new Address();//指定要查询的字段&#xff0c;原生sql中select后面的字段
$model->field(&#39;id,name&#39;)->select(); //相当于原生sql中的order by
$model->order(&#39;id desc,time desc&#39;)->select(); //相当于原生sql中的limit条件
$model->limit(3)->select(); $model->limit(0,3)->select(); $model->limit(&#39;0,3&#39;)->select(); //相当于原生sql中的group by
$model->group(&#39;cate_id&#39;)->select(); //相当于原生sql中的having条件
$model->having(&#39;id>3&#39;)->select(); //alias方法设置别名&#xff0c;join方法连表查询
$model->alias(&#39;a&#39;)
->join(&#39;think_user_type t&#39;,&#39;a.id&#61;t.user_id&#39;, &#39;left&#39;)
->select(); //Address::alias(&#39;a&#39;)->join(&#39;tpshop_user u&#39;,&#39;a.user_id &#61; u.id&#39;, &#39;left&#39;)->select();
连表查询&#xff1a;SELECT * FROM tpshop_goodspics
g LEFT JOIN tpshop_goods gs on g.goods_id &#61; gs.id;
$data &#61; \app\admin\model\Goods::where(&#39;id&#39;, &#39;>&#39;, 32)
->field(&#39;id, goods_name&#39;)
->order(&#39;id desc&#39;)
->limit(5)
->select();
dump($data);
3、统计查询&#xff08;聚合查询&#xff09;
见手册--模型--聚合&#xff0c;或者手册--数据库--查询构造器--聚合查询
在模型中也可以调用数据库的聚合方法进行查询&#xff1a;
方法 | 说明 |
---|
count | 统计数量&#xff0c;参数是要统计的字段名&#xff08;可选&#xff09; |
max | 获取最大值&#xff0c;参数是要统计的字段名&#xff08;必须&#xff09; |
min | 获取最小值&#xff0c;参数是要统计的字段名&#xff08;必须&#xff09; |
avg | 获取平均值&#xff0c;参数是要统计的字段名&#xff08;必须&#xff09; |
sum | 获取总分&#xff0c;参数是要统计的字段名&#xff08;必须&#xff09; |
这些方法的返回值是具体的数据。在连贯操作中只能放在最后&#xff0c;不需要使用find和select。
count方法 相当于 select count(*) from tpshop_user;
4、数据字段查询
① 查询一条记录的一个字段的值
Goods::where(‘id’, 2)->value(‘goods_name’);
② 查询多条记录的一个字段的值&#xff0c;返回一个一维索引数组
Goods::where(‘id’, ‘GT’, 2)->column(‘goods_name’);
③ 查询多条记录的一个字段的值&#xff0c;以id字段值作为数组索引
Goods::where(‘id’, ‘GT’, 2)->column(‘goods_name’, ‘id’);
5、trace调试
Trace调试功能就是ThinkPHP提供给开发人员的一个用于开发调试的辅助工具。可以实时显示当前页面的操作的请求信息、运行情况、SQL执行、错误提示等
开启trace调试&#xff1a;
修改application/config.php , 配置以下参数&#xff1a;
&#39;app_trace&#39; &#61;> true
小结练习&#xff1a;
十四、模板中数据的展示&#xff08;了解&#xff09;
1、条件判断标签if
TP框架中内置了if标签&#xff0c;用于在模板文件中进行if判断。语法如下&#xff1a;
{if condition&#61;"($name &#61;&#61; 1) OR ($name > 100) "} value1{elseif condition&#61;"$name eq 2"/}value2{else /} value3{/if}也可以写为以下形式&#xff1a;{if ($name &#61;&#61; 1)}value1{/if}
2、范围判断标签in
范围判断标签包括in notin between notbetween四个标签&#xff0c;都用于判断变量是否中某个范围。
{in name&#61;"id" value&#61;"1,2,3"} id在范围内{/in}{in name&#61;"id" value&#61;"$range"} id在范围内{/in}
Name属性值为变量名&#xff0c;不带$符号
Value属性值可以是字符串范围&#xff0c;也可以是数组变量或者字符串变量。
相当于原生php中的 if(in_array())
3、使用函数
&#xff08;见手册--模板--使用函数&#xff09;
在模板文件中输出变量&#xff0c;可以对变量使用函数进行处理
语法&#xff1a;两种语法&#xff1a;
{$变量名称|函数名称&#61;arg1,arg2,###}
参数中&#xff0c;可以使用### 代替输出的变量本身&#xff0c;如果变量本身是第一个参数&#xff0c;可以省略。
示例&#xff1a;
//对时间格式化
{$v.goods_create_time|date&#61;&#39;Y-m-d H:i:s&#39;, ###}
//对字符串进行md5加密
{$name|md5}
{:函数名称(参数)}
{:date("Y-m-d H:i:s", $v[&#39;goods_create_time&#39;])}
凡是php本身的函数或者框架中定义的函数&#xff0c;都可以在模板中直接调用。
4、系统变量
&#xff08;见手册--模板--系统变量&#xff09;
TP框架自带了一个$Think变量&#xff0c;用于在模板中输出系统变量。
$Think.server &#xff1a;相当于$_SERVER$Think.get &#xff1a;相当于$_GET$Think.post &#xff1a;相当于$_POST$Think.request &#xff1a;相当于$_REQUEST$Think.COOKIE &#xff1a;相当于$_COOKIE$Think.session &#xff1a;相当于$_SESSION$Think.config.名称 &#xff1a;输出配置参数$Think.const.名称&#xff1a;输出常量相当于框架帮我们做了以下事情
$Think &#61; [&#39;get&#39; &#61;> $_GET,&#39;post&#39;&#61;>$_POST];
$this->assign(&#39;Think&#39;, $Think);
示例&#xff1a;url地址&#xff1a;People.com | Celebrity News, Exclusives, Photos and Videos
展示page参数值&#xff1a; {$Think.get.page}
5、使用运算符
在模板文件中输出变量时&#xff0c;可以先使用运算符进行运算。
&#43; {$a&#43;$b}- {$a-$b}* {$a*$b}/ {$a/$b}% {$a%$b} 取余或取模&#43;&#43; {$a&#43;&#43;} 或 {&#43;&#43;$a}-- {$a--} 或 {--$a}
十五、数据的添加操作
&#xff08;见手册--模型--新增&#xff09; curd : create update read delete
1、添加一条数据&#xff08;save方法&#xff09;
Save方法返回值是写入的记录数
2、静态方法添加&#xff08;create方法&#xff09;
添加数据使用示例&#xff1a;
3、添加多条数据&#xff08;saveAll方法&#xff09;
4、过滤非数据表字段
save方法&#xff1a; 调用save方法之前&#xff0c;先调用allowField方法
create方法&#xff1a; 给create方法传递第二个参数&#xff0c;true
User::create($_POST, true);
十六、案例&#xff1a;后台商品添加功能
需求&#xff1a;只添加最基本的信息&#xff08;商品名称、商品价格、商品数量&#xff09;
表单展示 Goods控制器create方法&#xff08;整合模板&#xff09;
表单提交 Goods控制器save方法
思路&#xff1a; 显示form表单&#xff0c;提交form表单&#xff0c;将数据接收并保存到数据表。
1&#xff09;功能实现
① 确认表单完整性&#xff0c;完善提交地址、name属性值等信息
② 修改Goods控制器save方法&#xff0c;接收表单提交并保存数据。
2&#xff09;知识点
1、模型的时间戳功能
&#xff08;见手册--模型--时间戳&#xff09;
注&#xff1a;自动写入时间戳字段&#xff0c;前提是数据表必须有对应的字段存在。
2、页面跳转与重定向
&#xff08;见手册--控制器--跳转和重定向&#xff09;
成功时跳转
$this -> success(“提示信息”&#xff0c;“跳转地址”&#xff0c;“返回数据”&#xff0c;“等待时间”&#xff0c;“header信息”);
失败时跳转
$this -> error(“提示信息”&#xff0c;“跳转地址”&#xff0c;“返回数据”&#xff0c;“等待时间”&#xff0c;“header信息”);
等待时间默认3s。 跳转地址可以不写&#xff0c;默认跳转回上一页。
重定向跳转&#xff1a;用于直接跳转&#xff0c;不显示提示信息。
$this -> redirect(“跳转地址”&#xff0c;“请求参数”&#xff0c;“http code”);
十七、Ueditor富文本编辑器
1、Ueditor编辑器的下载
商品的详细描述一般都是图文混合。对于图文混合的内容&#xff0c;需要使用富文本编辑器来实现。
Ueditor富文本编辑器的下载地址&#xff1a;
GitHub - fex-team/ueditor: rich text 富文本编辑器
下载之后&#xff1a;
解压&#xff1a;
2、Ueditor编辑器的使用
使用步骤&#xff1a;
引入编辑器的代码到项目中
引入js文件
指定标签&#xff08;携带id属性&#xff09;&#xff0c;编辑器的显示位置
在js中实例化编辑器
注意&#xff1a;使用时&#xff0c;富文本编辑器 分为 普通输入界面&#xff0c;和源代码输入界面。
如果要自己写html代码设置样式&#xff0c;必须点击左上角的html按钮 切换到源代码界面&#xff0c;输入完成后&#xff0c;必须至少点击一次html按钮&#xff0c;否则php中收不到数据的。
案例实现&#xff1a; 商品添加页面 使用ueditor富文本编辑器
将编辑器整合到项目
页面上引入编辑器&#xff08;参考demo文件index.html&#xff09;
① 引入js文件
② 在页面定义标签&#xff0c;id属性&#xff0c;name属性
③ 使用js代码实例化编辑器
商品描述的添加&#xff1a;
控制器中接收到的 商品描述字段值&#xff0c;是一段html代码字符串。
示例&#xff1a;
test