知识点:获取器 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);
}
以上方法查询 student 表中,name 或 nickname 中是否带有“六”这个字符串,接着查询身高和id必须大于0,随后进行输出。此时数据库内容如下:
结果应该是王六和西瓜都会出现在查询结果之中,结果如下:
当然也可以像下面的代码示例一样进行编写:
public function select(){$res = Db::name('student')->where([ ['id', '>', 0], ['name', 'like', '%六%'] ])->select();dump($res);
}
二、复杂情况下使用 whereRaw 自己写条件
挡在复杂情况下需要查询时,是用 whereRaw 可以自行对条件进行编写:
$res = Db::name('student') ->whereRaw('(name LIKE "%六%" AND id>0 ) or (height > 160)') ->select();
以上的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(); }
}
以上代码中 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);
}
以上代码中,使用了 withAttr 方法,其中 name 表示你需要得到的字段,后面则是一个闭包,这个闭包中的第一个参数 value 则是 name 这个字段的数据,而 data 是这个遍历到这个类之中的这一行的数组数据,这时你可以直接更改对应的内容,在此只是修改了咱们需要修改的数据,最后 dump 打印后结果如下:
所有想要增加最后后缀的 name 字段已经完成了增加。