码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》


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

  • 相关阅读:
    python中的asyncio使用详解与异步协程的处理流程分析
    Spring 源码阅——忽略感知接口对应成员变量的自动装配
    这一定是前端导出Excel界的天花板~
    Python 连接 ES 的 API 用例:获取满足条件的索引列表
    Linux环境中使用C++ JsonCpp库
    可学习的FrameField优化建筑物提取CVPR2021
    java计算机毕业设计装修设计管理系统设计与实现源码+系统+mysql数据库+lw文档+部署
    运维常见硬件故障的排查与修复
    Rust实现线段树和懒标记
    基于springboot实现自习室预订系统的设计与实现项目【项目源码+论文说明】
  • 原文地址:https://blog.csdn.net/A757291228/article/details/126186226
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号