(目前仅供自用笔记)
1.TP5支持4中数据库类型,常用mysql
TP5常用的3种查询方式:
where('banner_id','=',$id)->find();
//查询出一个一维数组
//table和where只是一个对象,只会返回一个Query对象,称为辅助方法(链式方法),不同的链式方法没有先后顺序,但是相同的可能会生成不同的sql语句
//数据库操作方法(find,select,update,insert,delete)
// $result = Db::table('banner_item')
// ->where('banner_id','=',$id)
// ->select();
//非链式(操作不方便)
// Db::table('banner_item');
// Db::where('banner_id','=',$id);
// DB::where();
// ...
// $result = DB::select();
//执行操作后,整个对象会被清除
//where('字段名','表达式','查询条件');
//表达式、数组法(官方说不灵活,不安全)、闭包
$result = Db::table('banner_item')
->where(function ($query) use ($id){
$query->where('banner_id','=',$id);
})
->select();
return $result;
}
}
where('banner_id','=',$id)->find();
//查询出一个一维数组
//table和where只是一个对象,只会返回一个Query对象,称为辅助方法(链式方法),不同的链式方法没有先后顺序,但是相同的可能会生成不同的sql语句
//数据库操作方法(find,select,update,insert,delete)
// $result = Db::table('banner_item')
// ->where('banner_id','=',$id)
// ->select();
//非链式(操作不方便)
// Db::table('banner_item');
// Db::where('banner_id','=',$id);
// DB::where();
// ...
// $result = DB::select();
//执行操作后,整个对象会被清除
//where('字段名','表达式','查询条件');
//表达式、数组法(官方说不灵活,不安全)、闭包
$result = Db::table('banner_item')
// ->fetchSql()
->where(function ($query) use ($id){
$query->where('banner_id','=',$id);
})
->select();
//ORM Obeject Relation Mapping 对象关系映射(把一个表单当做一个对象,操作的是一个对象,对象与对象之间的作用关系,面向对象)
//模型(中小型项目建议使用模型,而非原生sql或者Db)
//最简单就是一个对象,不单单是完成数据库的查询,
//还包含相关的业务逻辑,并不仅仅是对象的集合,
//还是一个业务的集合,模型的主要作用就是处理一些复杂的业务逻辑,
//模型可能是对应多个表,也可能是对应多个对象,
//模型是根据功能划分的,tp5中模型不单单是model一层,可以划分为多层model、service等等
//Db属于数据库访问层,model模型是建立在数据库访问层之上更加抽象的处理业务逻辑的模型层
return $result;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public function getBanner($id)
{
//正常情况下,3句话搞定
(new IdIsInt())->batch()->goCheck();
// $banner = BannerModel::getBannerByID($id);
$banner = BannerModel::get($id);//返回一个对象
if (!$banner){
throw new BannerMissException();
// throw new Exception('内部错误');
}
// return json($banner,200);
return $banner;
}
ORM返回的是对象,不是数组
返回的对象优势在于可以有更多的方法和属性来操作它(这是tp5已经封装好的),且不用json()序列化,在tp5中设置'default_return_type' => 'json'
,可以直接转换成json格式输出
// $banner = BannerModel::getBannerByID($id);
$banner = BannerModel::get($id);//返回一个对象
// get,find,all,select
// get和all是模型特有的方法
// find和select是Db特有的,且模型也可以使用,模型层在数据访问层之上
//实例化对象调用
// $banner = new BannerModel();//模型对象对应的是数据库中的一条数据记录
// $banner = $banner->get($id);//用这条具体的记录再找另外一个具体记录,合理性较弱
// 静态调用:
//优 1.调用起来更加简洁,不需要实例化模型对象(例:直接通过BannerModel类的方式来调用get方法获取到想要的结果)
//优 2.模型的本身意义上来考虑,类对应到数据库中的一张表,然后再找一条数据,更加合理
//劣 对编程思想不利,不清楚里面逻辑调用原理
Db原生和ORM性能对比(相同查询条件下)