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

2022-09-20 14:58:11 浏览数 (1)

知识点:获取器 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 字段已经完成了增加。

0 人点赞