学习TP框架(二)
来源:互联网 发布:吃奶酪 知乎 编辑:程序博客网 时间:2024/06/15 19:03
目前学TP框架目的是让开发更高效,所以懂得使用流程,会调api就行。
2017/4/30
一、任务
- 动手写一个mvc实例,熟悉熟悉最简单的CRUD操作。
- 在不断优化的过程中,回顾TP5使用流程
二、正文
- 完成基本的CRUB操作
1、sql操作
<?phpnamespace app\api\controller;/** * Description of StudentTest * StudentTest用来通知model中的Student进行CRUB操作 * @author Administrator */class StudentTest extends \think\Controller { //函数名这样写,url怎么写? //http://localhost/api/student_test/insert/name/123/id/123/age/123/sex/123 public function insert($name, $id, $age, $sex) { $student = new \app\api\model\Student; $student->number = $id; $student->name = $name; $student->age = $age; $student->sex = $sex; $student->save(); } //函数名这样写,url应该写成什么样? //http://localhost/api/studentTest/deleteStudent //函数名完全小写,还未曾测试 public function deleteStudent() { //有占位符吧? //1.使用原生操作 测试结果:成功 返回结果:int(1) $result = \think\Db::execute('delete from student where number = 123'); dump($result); // } //函数名完全小写 实验结果:成功 返回结果:int(1) //http://localhost/api/studentTest/createstudent public function createStudent() { //2.使用原生操作 $result = \think\Db::execute('insert into student(name,number,age,sex) values (?,?,?,?)', ['789', 789, '789', '789']); dump($result); } /* 实验结果:array(1) { [0] => array(4) { ["name"] => string(3) "789" ["number"] => int(789) ["age"] => int(789) ["sex"] => int(789) } } */ public function findStudent() { $result = \think\Db::query('select * from student where number = ?', [789]); dump($result); //query方法返回的是一个数组 } public function updateStudent(){ //在原生操作中使用数组的感觉很好。 $result = \think\Db::execute('update student set age = ? where number = ?',['999',789] ); dump($result); }}
以上我使用的是数据库原生查询(也就是Sql查询)。初次之外还有更高级的数据库链式查询,使用模型查询。这三种操作方式中,属模型查询最高级,原生查询最低级。
2、链式操作
//使用链式操作数据库 //sql查询和链式查询的相同点:都使用Db类操作数据库。 //sql查询和链式查询本质上是不是等价的? //是的。tp5来发手册上写明,链式查询最后会生成相应的sql语句。 public function insertV2(){ //注意php数据语法 \think\Db::name('student') ->insert(['name'=>'zs','number' => 1110,'sex' => '12','age' =>'22']); //数组的顺序没要求 } public function updateV2(){ \think\Db::name('student') ->where('number',1110) ->update(['name'=>"ls"]); } /* * array(1) { [0] => array(4) { ["name"] => string(2) "ls" ["number"] => int(1110) ["age"] => int(22) ["sex"] => int(12) } } */ //多表联合查询怎么做? public function findV2(){ $result =\think\Db::name('student') ->where('number',1110) ->select(); dump($result); } //http://localhost/api/student_test/deleteV2/number/1110 //实验结果:成功 public function deleteV2($number) { \think\Db::name('student') ->where('number',$number) ->delete(); }
问1:如果查询涉及到多个表?怎么处理?
解决办法:既然可以使用sql语句一次查询多个表,在tp5,当然也可以。比如在《数据库系统概论》中指明“如果需要快捷查询多个表的数据,可以使用视图查询,相当于在数据库创建了一个视图,但仅仅支持查询操作”。
3、模型操作
//使用模型进行操作 public function add() { //有没有()都行吧? $student = new \app\api\model\Student(); $student->name='wangma'; $student->number=564; $student->age=56; $student->sex=55; if($student->save()){ return '用户'.$student->name.'Suceess'; }else{ return $student->getError(); }//if ended 能不能把url再缩短一点? 配置下路由 //Route::rule("sadd",'api/StudentTest/add'); } //模型查询 //模型的get方法用于获取数据表的数据并返回当前模型对象实例,通常只需要传入主键作为参数,如果没有传入任何值,则表示获取第一条数据。这点还未测试 public function read($number){ $student = \app\api\model\Student::get($number); echo $student->name.'<br/>'; echo $student->number.'<br/>'; } //模型更新 public function update($number) { $student = \app\api\model\Student::get($number); $student->name = 'fengyuan'; if(false !=$student->save()){ return '用户更新成功'; } else { return $student->getError(); } } //模型删除 public function delete($number) { $student = \app\api\model\Student::get($number); if($student){ $student->delete(); return '删除成功'; } else { return '删除失败'; } }
问2:如果查询涉及到多个表?怎么处理?
答:模型关联。就我个人理解,模型关联本质上就是数据表的关联,是实现多表查询的手段。比如数据库中有student表,book表
Student模型:
<?php/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */namespace app\api\model;/** * Description of Student * 对应数据表 student * @author Administrator */class Student extends \think\Model { protected $table = 'student'; //最重要的关联:理解了关联,也就能理解大部分实例了。 //模型关联(数据表关联)不是在控制器中关联 public function books() { //return $this->hasMany('BooK'); //用户has one 书关联 return $this->hasOne('Book','number'); //tp手册上写 hasOne('关联模型名','关联外键','主键','别名定义,'jion类型') //关联外键=当前模型的_id ,当前模型名是指Student还是hasOne中填入的模型 //如果是Student,z则出错 //数据表字段不存在:[number] //所以手册所说的应该是是hasOne中的模型 //user_id 是book表的外键。 } }
控制器部分代码:
//模型关联后的操作 //关联写入 public function addV3(){ $student = new \app\api\model\Student(); //写入关联数据 $student->name ='5555747127521475tttt'; $student->number='5252458879'; $student->age=6666; $student->sex=66666; if($student->save()){ $book = new \app\api\model\Book(); $book->name='learn php'; $book->no='125553'; $student->books()->save($book); return '用户新增成功'; } else { return $student->getError(); } }
以上路由已经配置好。
三、小结:
至此,php语法,tp框架的流程算是熟悉了一遍,tp5的其他功能,比如事务,还没有试过,需要用时再翻手册查吧。
2017/5/1 明天继续更。。。
0 0
- 学习TP框架(二)
- 学习TP框架(一)
- TP框架基础介绍-----(二)
- Android TP(二)
- php框架(CI,TP,LAVAREL,SWOOLE)源码学习之TP
- 一步一步循序渐进学习TP二(新手篇)
- TP框架基础(一)
- TP框架学习笔记第一天
- TP框架学习笔记第二天
- TP框架学习笔记第三天
- TP框架学习笔记第四天
- TP框架
- TP框架
- Think PHP(TP)框架的基本使用 (二)
- TP框架----hook(钩子)的使用
- 支付宝接口代码(TP框架)
- tp框架的初始了解-------(一)
- 支付宝接口代码(TP框架)
- 【网络爬虫】使用HttpClient4.3.5抓取数据
- OpenCV安装教程及错误:Unsupported gpu architecture 'compute_11' 解决方法
- SPOJ 962 IM
- reactnative Dimensions进行获取屏幕宽度和高度信息
- 【JAVA-基础】—类成员单例(Singleton)类
- 学习TP框架(二)
- SSH学习笔记
- HZAU校赛补题PA(动态规划)
- Java异常处理、异常处理使用的一些注意点(例如,基类和子类捕获的顺序问题)
- 扩展欧几里德 求最小整数解 a,b,c可以为负数
- Java基本数据类型与位运算、原码&补码&反码
- iOS TextField Placeholder设置颜色
- Maven实战之安装和使用
- [数据结构]快速排序