热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Thinkphp模型操作(二)

十三、其他查询方法(重点:where方法)1、where方法(查询语法)见手册--数据库--查询构造器--查询语法where(字段名

十三、其他查询方法(重点: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] EXISTSEXISTS查询
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();

image-20190705223507911

注意&#xff1a;使用了where方法后&#xff0c;查询数据可以使用find方法和select方法&#xff0c;不能使用get方法和all方法。&#xff08;原因&#xff1a;where方法返回的是Query对象&#xff0c;不是模型对象&#xff09;

扩展&#xff1a;批量条件查询&#xff08;手册-数据库-查询构造器-高级查询&#xff09;

image-20190705223542649

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;

image-20190705223755393

image-20190705223844524

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

image-20190705224224392

小结练习&#xff1a;

1562397659957

image-20190705224259166

十四、模板中数据的展示&#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;

wpsD126.tmp

Save方法返回值是写入的记录数

image-20190705225318404

2、静态方法添加&#xff08;create方法&#xff09;

image-20190705225519577

添加数据使用示例&#xff1a;

image-20190705225644153

image-20190705225724244

3、添加多条数据&#xff08;saveAll方法&#xff09;

image-20190705225443739

4、过滤非数据表字段

save方法&#xff1a; 调用save方法之前&#xff0c;先调用allowField方法

image-20190705225801739

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属性值等信息

image-20190705225859278

image-20190705225929058

② 修改Goods控制器save方法&#xff0c;接收表单提交并保存数据。

image-20190705230002327

2&#xff09;知识点


1、模型的时间戳功能

&#xff08;见手册--模型--时间戳&#xff09;

image-20190705230038639

注&#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 富文本编辑器

image-20190705230140608

下载之后&#xff1a;

image-20190705230249809

解压&#xff1a;

image-20190705230220654

2、Ueditor编辑器的使用

使用步骤&#xff1a;

引入编辑器的代码到项目中

引入js文件

指定标签&#xff08;携带id属性&#xff09;&#xff0c;编辑器的显示位置

在js中实例化编辑器

注意&#xff1a;使用时&#xff0c;富文本编辑器 分为 普通输入界面&#xff0c;和源代码输入界面。

如果要自己写html代码设置样式&#xff0c;必须点击左上角的html按钮 切换到源代码界面&#xff0c;输入完成后&#xff0c;必须至少点击一次html按钮&#xff0c;否则php中收不到数据的。

案例实现&#xff1a; 商品添加页面 使用ueditor富文本编辑器

将编辑器整合到项目

image-20190705230343801

页面上引入编辑器&#xff08;参考demo文件index.html&#xff09;

① 引入js文件

image-20190705230408676

② 在页面定义标签&#xff0c;id属性&#xff0c;name属性

image-20190705230436979

③ 使用js代码实例化编辑器

image-20190705230458042

商品描述的添加&#xff1a;

image-20190705230525554

控制器中接收到的 商品描述字段值&#xff0c;是一段html代码字符串。

示例&#xff1a;

test






推荐阅读
author-avatar
喜生-Da
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有