博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(8)学习tp5之ORM操作数据库
阅读量:3780 次
发布时间:2019-05-22

本文共 2662 字,大约阅读时间需要 8 分钟。

系统学习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);    }
你可能感兴趣的文章
2021北京交通大学计算机专硕初试经验分享
查看>>
2021北京交通大学计算机专硕复试经验分享
查看>>
简单实现一个数组、链表
查看>>
关于从其他程序切回word文档时卡顿问题的解决办法
查看>>
Linux安装Java环境
查看>>
Java集合 ArrayList原理
查看>>
Git的基本操作
查看>>
简述128陷阱
查看>>
在spring boot项目中修改包名要注意的一些问题
查看>>
编写类实现从后台向前台返回所要求的数据
查看>>
spring boot的学习(1.创建一个初始的spring boot项目)
查看>>
Python的入门学习
查看>>
⑤mpvue 小程序框架 :初始化项目 分析项目结构
查看>>
⑦mpvue Flyio实现前后台交互
查看>>
操作系统:Java模拟CPU调度算法(非抢占短进程优先、可抢占优先权调度、多级反馈队列调度)
查看>>
【前端】在页面中还原英雄联盟客户端?
查看>>
【前端】Vue 纯干货 基础知识分享!
查看>>
3.1servlet入门和MVC模型
查看>>
3.2servlet功能和会话技术
查看>>
泛型详解
查看>>