//闭包式$result = Db::table('banner_item') ->fetchSql()//打印当前sql语句 ->where(function ($query) use ($id) { $query->where('banner_id','=',$id); }) ->select();
开启SQL日志记录
在前面我们已经关闭了框架的自动记录日志,手动有选择的开启了程序缺点的记录日志以避免不必要得缺点信息摧残浪费蹂躏资源,那么SQL的记录日志有助于我们更清楚看到实行sql语句,以是打开办法是在入口页,这样一来避免所有的缺点都被记录二来只要访问框架那么所有实行的SQL语句将都被记录日志;
//初始化sql记录日志 只记录sql实行日志\think\Log::init([ 'type' => 'File', 'path' => LOG_PATH, 'level' => ['sql']]);
ORM(Object Relation Mapping)工具关系映射
ORM思想大略来说便是要用面向工具的一种思维办法来思考数据表,在传统的sql语句里面并没有把表当做是一个工具,我们把它理解的便是一个二维的数据构造,那么我们用ORM就要把数据表当做一个工具去处理,那么我们在操作的时候就不是操作数据表而是工具; ORM它不是一种详细的措辞也不是框架,而是一种思想,那么不同的措辞以及不同的框架他都会去实现自己的ORM工具关系映射模型; 那么模型紧张的浸染便是处理一些繁芜的逻辑以及数据表的数据,ORM思想是把一个表当做工具去处理,而模型它可能对应多个工具同时对应多个表的。模型它和工具、表之间没有一定联系,模型是根据自己的业务逻辑来划分的,也便是根据功能划分;
get、find、all、select:find和select是Db的特有查询方法,get和all是模型特有的查询方法,利用Db查询时不能利用get和all,但是利用模型查询时这四种都可以利用,由于Db是模型的基石,两者是不能分离的,在模型的内部终极去访问数据库的时候还是利用的Db来完成的;

首先模型对应的数据表是有外键关联的,然后在主表模型中新建一个方法来关联模型,在模型中利用hasMany方法来关联其他模型;末了查询出来的结果是多维数组,相称于SQL的多表联查; Banner模型(数据表间关系一对多BannerItem)
class Banner extends Model { //hasMany是一对多的关系方法; public function items() { //被关联的模型类名,被关联模型的外键,Banner模型的主键 return $this->hasMany('BannerItem','banner_id','id'); }}
BannerItem模型(数据表间关系一对一Image) belongsTo和hasOne的差异:如果当前模型里面存在外键字段那么利用belongsTo关系方法,反过来如果当前模型没有外键,外键是存在他干系联的模型里面那么就利用hasOne关系方法;
class BannerItem extends Model{ //belongsTo是一对一的关系方法; public function img() { //被关联的模型类名,被关联模型的外键,BannerItem模型的主键 return $this->belongsTo('Image','img_id','id'); }}
Image模型
class Image extends Model{}
掌握器中调用with方法并传入关联方法名称,中括号可传入嵌套模型,如果只有一个关联模型,那么可以省去中括号 口语理解:如果我要查询Banner模型那么必须with(具有)BannerItem(也便是items关联方法)同时BannerItem下还关联有Image模型
use app\api\model\Banner as BannerModel;class Banner { public function getBanner($id) { $result = BannerModel::with(['items','items.img'])->find($id); //隐蔽字段 $result->hidden(['id']); //显示字段 $result->visible(['id']); }}
开启路由完全匹配模式
TP5中路由设置基本相同但参数不同可能会导致路由导向缺点,如下例子:
Route::get('api/:version/theme','api/:version.Theme/getSimpleList');Route::get('api/:version/theme/:id','api/:version.Theme/getComplexOne');
这个时候就须要开启路由利用完全匹配,在config文件变动route_complete_match配置为true;
来源:简书 作者:PHPer_ 侵删