(8)学习tp5之ORM操作数据库

本文详细讲解了如何在TP5框架中使用ORM进行数据库操作,包括在控制器中直接使用ORM、打印SQL语句fetchSql()、事务处理等关键知识点,旨在帮助开发者更好地理解和应用ORM技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统学习tp5框架,请点击下面的连接

(1)学习tp5之助手函数得原理解析

(2)学习tp5之常量、自动加载、命名空间

(3)学习tp5之配置文件

(4)学习tp5之路由类型,定义,动态注册,过滤,闭包,miss(默认),资源路由

(5)学习tp5之请求

(6)学tp5之响应

(7)学习tp5之控制器原理和使用

(8)学习tp5之ORM操作数据库

(9)学习tp5之模型

(10)学习tp5之视图

(11)学习tp5之命令行的使用和验证表单令牌

(12)学习tp5之验证码和缓存

(13)学习tp5之上传图片

(14)学习tp5之日志

(15)学习tp5之 自定义命令行


ORM是在M层(模型)中用的一种技术(工具,既然是工具它就有名字,它的名字就是Db类

orm即可以在C层直接使用,也可以在M层直接使用

orm:对象关系模型映射,它把数据库中的每一张表映射成对象了。然后要操作这个表的时候,就用对象调方法(如->select()),用面向对象的形式就可以了。这样就不用写原生sql语句了

控制器文件命名,采用大驼峰。可加Controller,也可不加,建议不加

路由:


控制器代码(orm在控制器中直接使用):

    //原生,使用了参数绑定
    public function protogenesis()
    { 
        Db::execute('insert into tp5_user (name,password) values (:name,:password)',['name'=>'xg','password'=>'123456']);
        $res = Db::query('select * from tp5_user ');
        dump($res);
    }


    //面向对象【添加】
    public function objAdd(){
        $data = [
            'name' => 'yx',
            'password' => '123'
        ];
        $id = Db::name('user')->insert($data,false,true);   //第3个参数,返回插入的id
        dump($id);
    }

    //面向对象【查询】
    public function objSelect(){

        //技巧:field()和where()等方法都可以使用数组进行传参

        //1、【选取】数组里面放id 会解析成子查询; SELECT * FROM `tp5_user` WHERE `id` IN (2,3);
        $res = Db::name('user')->select([2,3]);

        //2、【或者条件】age等于30 || 等于80的;
        //SELECT * FROM `tp5_user` WHERE `age` = 30 AND `id` IN (2,3) OR `age` = 100;注意:这样子查询会失效
        $res = Db::name('user')->where('age',30)->whereOr('age',100)->select([2,3]);

        //3、【并且条件】SELECT * FROM `tp5_user` WHERE `id` = 4 AND `age` = 26
        $where = ['id'=>4,'age'=>'26'];
        $res = Db::name('user')->where($where)->select();

        //4、【打印curd的sql语句】加上fetchSql();SELECT * FROM `tp5_user` WHERE  `id` = 1 LIMIT 1
        $res = Db::table('tp5_user')->fetchSql(true)->find(1);

        //5、【字段取反】field()加上第2个参数,是不查name字段; SELECT `id`,`password`,`age` FROM `tp5_user`
        $res  = Db::table('tp5_user')->field(['name'],true)->select();

        //6、【使用内置函数】查指定字段(年龄)的总和;SELECT sum(age) FROM `tp5_user`
        $res  = Db::table('tp5_user')->field(['sum(age)'])->select();

        //7、【使用关键字去重】SELECT DISTINCT `name` FROM `tp5_user`
        $res = Db::table('tp5_user')->distinct(true)->field('name')->select();


        /* 8、连表查询
           内连 == 匹配条件相等,2张表里都有的
           左连 == 左表里有多少条就打印出来多少条,匹配不上的,右表字段显示null
           右连 == 右表里有多少条就打印出来多少条,匹配不上的,左表字段显示null
         * */
        $res = Db::name('article')
            ->alias('a')
            ->join('cat c','a.cat_id=c.id')
            ->field(['a.id','a.title','a.content','c.cat_name'])  //join的时候不能用排除
            ->select();


        //9、如果事物失效,查错思路,注释掉提交事物,如果还能执行sql语句,就不要想代码错误了,想其他的 如:表引擎
        Db::startTrans();   // 启动事务
        try{
            Db::table('tp5_user')->where(['id'=>1])->update(['age'=>951]);
            $a = 1/0; //用错误字段 || 0不能做除数,来模拟失败
            Db::commit();   // 提交事务
        } catch (\Exception $e) {
            dump($e->getMessage());
            Db::rollback(); // 回滚事务
        }
        
        dump($res);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值