前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》

08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》

作者头像
1_bit
发布2022-09-20 14:58:11
7150
发布2022-09-20 14:58:11
举报
文章被收录于专栏:我的知识小屋

知识点:获取器 withAttr、多连缀、whereRaw、事务、数据集

文章目录(更新中…)

01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添加《ThinkPHP6 入门到电商实战》 06 tp6 的数据更新(改)及删除 《ThinkPHP6 入门到电商实战》 07查询表达式 及 page分页、order 排序《ThinkPHP6 入门到电商实战》 08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。

一、多连缀

在tp6 中,where 是可进行多连缀,例如以下示例:

代码语言:javascript
复制
public function select(){
    $res = Db::name('student') 
    ->where('name|nickname', 'like', '%六%') 
    ->where('height&id', '>', 0) 
    ->select();
    dump($res);
}

以上方法查询 student 表中,name 或 nickname 中是否带有“六”这个字符串,接着查询身高和id必须大于0,随后进行输出。此时数据库内容如下:

在这里插入图片描述
在这里插入图片描述

结果应该是王六和西瓜都会出现在查询结果之中,结果如下:

在这里插入图片描述
在这里插入图片描述

当然也可以像下面的代码示例一样进行编写:

代码语言:javascript
复制
public function select(){
   $res = Db::name('student')->where(
       [ 
           ['id', '>', 0], 
           ['name', 'like', '%六%'] 
       ]
       )->select();
   dump($res);
}

二、复杂情况下使用 whereRaw 自己写条件

挡在复杂情况下需要查询时,是用 whereRaw 可以自行对条件进行编写:

代码语言:javascript
复制
$res = Db::name('student') ->whereRaw('(name LIKE "%六%" AND id>0 ) or (height > 160)') ->select();

以上的sql 中使用了 or 操作,在 where中也有很多的快捷查询给与到,例如如下表格示例:

在这里插入图片描述
在这里插入图片描述

三、事务

事务用于在对多个数据表进行操作时,每个操作是互相有关联的,第二步没完成第一步则会产生错误,当使用事务时,在执行对应的内容后,若发生错误,则会自动回滚数据,之前所作的操作将会回滚,保持数据的正确性。

例如以下代码:

代码语言:javascript
复制
public function select(){
    Db::startTrans(); 
    try {
        Db::name('student')->where('id', 13)->save(['height'=>Db::raw('height - 1')]); 
        Db::name('class')->save(['change'=>1]); 
        Db::commit(); 
    } catch (\Exception $e) { 
        echo '失败回滚!'; 
        Db::rollback(); 
    }
}

以上代码中 Db::startTrans(); 表示启动事务, try 表示开始尝试执行 sql;在try 中右两条对数据库表执行操作的代码,第一条是给id 为 13 这条数据的身高减1,减1完毕之后再给 class 这个表去新增一个数据,如果没有问题,那么就确认 Db::commit(); ;若失败则执行 catch 异常部分,回滚数据 Db::rollback(); 。

这是数据库 student 执行之前的数据:

在这里插入图片描述
在这里插入图片描述

执行之后的数据:

在这里插入图片描述
在这里插入图片描述

并且 class 表也新增了数据:

在这里插入图片描述
在这里插入图片描述

四、数据集

对数据集的操作是指通过查询或其他操作得到的数据后,可以对这个数据集使用一些方法,这些方法如下表:

在这里插入图片描述
在这里插入图片描述

五、获取器 withAttr

在tp6 中使用获取器可以极大程度的方便某些需求,例如你需要你的数据某个字段前面或者后面加一个字符进行链接,又或者想要进行一些其他操作,使用获取器会很舒服,例如我想在 student 表的数据的 name 值后面链接一个 withAttr,那么代码如下:

代码语言:javascript
复制
public function select(){
    $res = Db::name('student')->withAttr('name', function ($value, $data) { 
        return $value.' withAttr'; 
    })->select(); 
    dump($res);
}

以上代码中,使用了 withAttr 方法,其中 name 表示你需要得到的字段,后面则是一个闭包,这个闭包中的第一个参数 value 则是 name 这个字段的数据,而 data 是这个遍历到这个类之中的这一行的数组数据,这时你可以直接更改对应的内容,在此只是修改了咱们需要修改的数据,最后 dump 打印后结果如下:

在这里插入图片描述
在这里插入图片描述

所有想要增加最后后缀的 name 字段已经完成了增加。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、多连缀
  • 二、复杂情况下使用 whereRaw 自己写条件
  • 三、事务
  • 四、数据集
  • 五、获取器 withAttr
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档