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

举报
1_bit 发表于 2022/08/07 00:59:15 2022/08/07
【摘要】 知识点:获取器 withAttr、多连缀、whereRaw、事务、数据集 文章目录(更新中…) 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkP...

知识点:获取器 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 是可进行多连缀,例如以下示例:

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

以上方法查询 student 表中,name 或 nickname 中是否带有“六”这个字符串,接着查询身高和id必须大于0,随后进行输出。此时数据库内容如下:
在这里插入图片描述
结果应该是王六和西瓜都会出现在查询结果之中,结果如下:
在这里插入图片描述
当然也可以像下面的代码示例一样进行编写:

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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

$res = Db::name('student') ->whereRaw('(name LIKE "%六%" AND id>0 ) or (height > 160)') ->select();

  
 
  • 1

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

三、事务

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

例如以下代码:

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(); 
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

这是数据库 student 执行之前的数据:
在这里插入图片描述
执行之后的数据:
在这里插入图片描述
并且 class 表也新增了数据:
在这里插入图片描述

四、数据集

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

五、获取器 withAttr

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

public function select(){
    $res = Db::name('student')->withAttr('name', function ($value, $data) { 
        return $value.' withAttr'; 
    })->select(); 
    dump($res);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上代码中,使用了 withAttr 方法,其中 name 表示你需要得到的字段,后面则是一个闭包,这个闭包中的第一个参数 value 则是 name 这个字段的数据,而 data 是这个遍历到这个类之中的这一行的数组数据,这时你可以直接更改对应的内容,在此只是修改了咱们需要修改的数据,最后 dump 打印后结果如下:
在这里插入图片描述
所有想要增加最后后缀的 name 字段已经完成了增加。

文章来源: i1bit.blog.csdn.net,作者:1_bit,版权归原作者所有,如需转载,请联系作者。

原文链接:i1bit.blog.csdn.net/article/details/126186226

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。