tp5高级全面(增删改查)

快捷查询

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

 
  1. Db::table('think_user')

  2. ->where('name|title','like','thinkphp%')

  3. ->where('create_time&update_time','>',0)

  4. ->find();

生成的查询SQL是:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' ) AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1

快捷查询支持所有的查询表达式。

区间查询

区间查询是一种同一字段多个查询条件的简化写法,例如:

 
  1. Db::table('think_user')

  2. ->where('name',['like','thinkphp%'],['like','%thinkphp'])

  3. ->where('id',['>',0],['<>',10],'or')

  4. ->find();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1

区间查询的查询条件必须使用数组定义方式,支持所有的查询表达式。

下面的查询方式是错误的:

 
  1. Db::table('think_user')

  2. ->where('name',['like','thinkphp%'],['like','%thinkphp'])

  3. ->where('id',5,['<>',10],'or')

  4. ->find();

批量查询

可以进行多个条件的批量条件查询定义,例如:

 
  1. Db::table('think_user')

  2. ->where([

  3. 'name' => ['like','thinkphp%'],

  4. 'title' => ['like','%thinkphp'],

  5. 'id' => ['>',0],

  6. 'status'=> 1

  7. ])

  8. ->select();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 AND `status` = '1'

闭包查询

 
  1. Db::table('think_user')->select(function($query){

  2. $query->where('name','thinkphp')

  3. ->whereOr('id','>',10);

  4. });

生成的SQL语句为:

SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10

使用Query对象查询

也可以事先封装Query对象,并传入select方法,例如:

 
  1. $query = new \think\db\Query;

  2. $query->name('user')

  3. ->where('name','like','%think%')

  4. ->where('id','>',10)

  5. ->limit(10);

  6. Db::select($query);

如果使用Query对象的话,select方法之前调用的任何的链式操作都是无效。

混合查询

可以结合前面提到的所有方式进行混合查询,例如:

 
  1. Db::table('think_user')

  2. ->where('name',['like','thinkphp%'],['like','%thinkphp'])

  3. ->where(function($query){

  4. $query->where('id',['<',10],['>',100],'or');

  5. })

  6. ->select();

生成的SQL语句是:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` < 10 or `id` > 100 )

字符串条件查询

对于一些实在复杂的查询,也可以直接使用原生SQL语句进行查询,例如:

 
  1. Db::table('think_user')

  2. ->where('id > 0 AND name LIKE "thinkphp%"')

  3. ->select();

为了安全起见,我们可以对字符串查询条件使用参数绑定,例如:

 
  1. Db::table('think_user')

  2. ->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%'])

  3. ->select();

V5.0.4+开始,ThinkPHP支持对同一个字段多次调用查询条件,例如:

 
  1. Db::table('think_user')

  2. ->where('name','like','%think%')

  3. ->where('name','like','%php%')

  4. ->where('id','in',[1,5,80,50])

  5. ->where('id','>',10)

  6. ->find();

视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,例如:

 
  1. Db::view('User','id,name')

  2. ->view('Profile','truename,phone,email','Profile.user_id=User.id')

  3. ->view('Score','score','Score.user_id=Profile.id')

  4. ->where('score','>',80)

  5. ->select();

生成的SQL语句类似于:

SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

注意,视图查询无需调用tablejoin方法,并且在调用whereorder方法的时候只需要使用字段名而不需要加表名。

默认使用INNER join查询,如果需要更改,可以使用:

 
  1. Db::view('User','id,name')

  2. ->view('Profile','truename,phone,email','Profile.user_id=User.id','LEFT')

  3. ->view('Score','score','Score.user_id=Profile.id','RIGHT')

  4. ->where('score','>',80)

  5. ->select();

生成的SQL语句类似于:

SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User LEFT JOIN think_profile Profile ON Profile.user_id=User.id RIGHT JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

可以使用别名:

 
  1. Db::view('User',['id'=>'uid','name'=>'account'])

  2. ->view('Profile','truename,phone,email','Profile.user_id=User.id')

  3. ->view('Score','score','Score.user_id=Profile.id')

  4. ->where('score','>',80)

  5. ->select();

生成的SQL语句变成:

SELECT User.id AS uid,User.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

可以使用数组的方式定义表名以及别名,例如:

 
  1. Db::view(['think_user'=>'member'],['id'=>'uid','name'=>'account'])

  2. ->view('Profile','truename,phone,email','Profile.user_id=member.id')

  3. ->view('Score','score','Score.user_id=Profile.id')

  4. ->where('score','>',80)

  5. ->select();

生成的SQL语句变成:

SELECT member.id AS uid,member.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user member INNER JOIN thi

query方法

query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法)。

使用示例:

 
  1. Db::query("select * from think_user where status=1");

如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的SQL语句是什么。

execute方法

execute用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false ,否则返回影响的记录数。

使用示例:

 
  1. Db::execute("update think_user set name='thinkphp' where status=1");

如果你当前采用了分布式数据库,并且设置了读写分离的话,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作,而不管你的SQL语句是什么。

参数绑定

支持在原生查询的时候使用参数绑定,包括问号占位符或者命名占位符,例如:

 
  1. Db::query("select * from think_user where id=? AND status=?",[8,1]);

  2. // 命名绑定

  3. Db::execute("update think_user set name=:name where status=:status",['name'=>'thinkphp','status'=>1]);

使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。

使用 transaction 方法操作数据库事务,当发生异常会自动回滚,例如:

自动控制事务处理

 
  1. Db::transaction(function(){

  2. Db::table('think_user')->find(1);

  3. Db::table('think_user')->delete(1);

  4. });

也可以手动控制事务,例如:

 
  1. // 启动事务

  2. Db::startTrans();

  3. try{

  4. Db::table('think_user')->find(1);

  5. Db::table('think_user')->delete(1);

  6. // 提交事务

  7. Db::commit();

  8. } catch (\Exception $e) {

  9. // 回滚事务

  10. Db::rollback();

  11. }

注意在事务操作的时候,确保你的数据库连接是相同的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
引用\[1\]:LayTab类是一个用于将数据转换成layui需要的数据形式的工具类。它包含了一些属性和方法,用于设置数据的格式和内容。\[1\]引用\[2\]:在具体功能的实现中,页面主要是对所有的信息进行查询,并将其显示出来。利用layui的数据表格来将数据显示在前端的页面上。首先需要在自己的jsp页面上复制layui官网上提供的数据表格代码,并进行相应的修改。\[2\]引用\[3\]:页面主要实现了查询所有、添加书籍、修改书籍、删除书籍、书籍的上下架和模糊搜索等功能。具体流程如下:首先查询数据库中的数据表信息,并将其显示在页面中;然后通过点击添加按钮,弹出层显示添加书籍的表单;接着通过点击修改按钮,弹出层显示修改书籍的表单;再通过点击删除按钮,删除书籍;还可以对书籍进行上下架操作;最后可以进行模糊搜索。\[3\] 根据你的问题,TP5+layui增删改查的实现可以参考以下步骤: 1. 首先需要在TP5中配置数据库连接和相关的模型(Model)。 2. 在控制器(Controller)中编写相应的方法,用于处理增删改查的请求。 3. 在视图(View)中使用layui的数据表格来显示数据,并添加相应的按钮和表单。 4. 在前端页面中,通过ajax请求将数据发送到后端进行处理,并将结果显示在页面上。 5. 根据需要,可以使用TP5的验证器(Validator)来对用户输入的数据进行验证。 6. 在控制器中根据请求的类型(增删改查)来执行相应的操作,并返回相应的结果。 通过以上步骤,你可以实现TP5+layui的增删改查功能。具体的代码实现可以根据你的需求进行相应的调整和修改。 #### 引用[.reference_title] - *1* *2* *3* [layui实现增删改查——图书管理](https://blog.csdn.net/weixin_42381196/article/details/118058698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

騒周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值