笔记

原创 2017年08月13日 03:39:06

7-8
一些Db操作数据库

       $result = Db::query('select * from banner where id=?',[1]);
       $result = Db::table('banner')->where('id','=',$id)->select();
       $result = Db::table('banner')->where(function($query) use ($id){
           $query->where('id','=',$id);
       })->select();

7-9节
模型继承Model后就可以直接使用get方法查询 而不需要自己写getBannerById(),可以在配置文件中配置输出格式 大概是34行

7-10节
每个模型名字最好对应数据库的表名 这样就可以相对应了 如果要把模型手动映射到某个表 可以使用:

protected $table = 表名

模型可以对应一个表 复杂的也可以对应多个表
tp5 可以使用Terminal 快速创建模型

>php think make:model api/BannerItem

要在根目录下指向命令,api代表的是模块。

7-11节
模型对应数据库的表
模型对象 对应数据库一条记录
静态方法(推荐)

  $banner = Banner::get($id)

实例化模型来调用

 $banner = (new Banner())->get($id)

7-12
查询

find select  get  all

前两者Db特有,后两者模型特有 如果使用get all 方法则不能使用Db查询。(Db是模型的基石)

模型 和数据库访问层(DB)的4个原则

模型主要处理业务DB就是用来操作数据库
不要因为模型的性能稍差而不使用模型
要用面向对象思维设计模型
模型的底层是数据库访问抽象层,可以自动调用数据库访问抽象层

8-1
A表和B表是1对多 那么在B中有很多重复的数据。
8-2
关联查询步骤(比如说是A表关联B)

 首先在A模型中增加items函数(函数名自己定义)(hasMany里面三个参数,分别是关联模型的模型名,关联模型与之相关联的字段名,当前模型的主键)

一对多

public function items()
{
return $this->hanMany('BModel','A_id','id')
}

一对一

public function items()
{
return $this->belongsTo('BModel','A_id','id')
}
$banner = AModel::with(items)->find($id)

8-3
A关联B B又嵌套关联C

在B模型中写

public function img()
{
return $this->hanMany('CModel','C_id','id')
}
$banner = AModel::with(['items','items.img'])->find($id)

A关联B 关联C

在A模型中写

public function img()
{
return $this->hanMany('CModel','C_id','id')
}

$banner = AModel::with(['items','img'])->find($id)

8-4
业务层在模型编写,然后在控制器调用模型中的方法。
好处是:模型中有许多内置的方法 下面列举几个。

把查出的json数据 隐藏其中的某些数据(下面演示隐藏id和name)

$banner = $banner->hidden(['id','name']);

只显示查出的某些数据

$banner = $banner->visible(['id','name'])

8-5
上述8-4中的隐藏显示方法仍然存在不足,比如说某个字段可能在很多接口都需要隐藏,那么你就需要在很多控制器去重复代码,其实我们完全可以避免这种情况,直接在模型中去 增加属性就可以。列如:
隐藏

protected $hidden = ['id','name'];

显示

protected $visible = ['id','name'];

8-6
在application目录下新建extra目录再在extra下建立配置文件,tp默认是可以自动加载的。列如:

新建 set.php文件
<?php
return [
    'pre_url' => 'your host'
];

怎么取出配置?

config('set.pre_url')

静态资源放在public目录下 才有权限访问。

8-7
读取器,可以在模型中读取某个字段的值,处理后返回,读取器的方法名是确定的get.字段名.Attr,里面传入的valuedata表示一行的值。
列如:当form字段=1时,在url字段前加上配置好的域名再返回。

public function getUrlAttr($value,$data)
{
$Url = $value;
if($data['form'] == 1)
{ $Url = config('set.pre_url').$value
}
return $url

8-8
思考一
上面8-7的问题 ,要是有很多表都有Url字段,那么如果我们是在每个有url字段的模型都定义这个读取器 代码就比较杂乱了
`改进:可以新增一个继承于model的basemodel,再让其他所有的业务model继承basemodel,把读取器放在basemodel中即可。
思考二:要是按照上面把读取器定义在了basemodel中 那么有些字段的url不需要这样处理 怎么办?

改进:可以把读取器嵌套在basemodel的一个方法里,然后再在需要处理的业务model层调用该方法,这样就只有在调用的时候才会识别读取器了

8-9
开闭原则:尽可能稍等 去修改之前的代码,因为新的代码测试成本高
支持多版本 路由上表示控制器的的V1别写死

改成:Rount::get(':v/url,:v/url');

8-10

`

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java丨仿“有道云笔记”项目 取名"Program 猿笔记"

- 项目名称:Program 猿笔记 - 开发工具:MyEclipse + Tomcat + JDK 1.7 - 相关技术:Editor.md、Servlet、Freemarker、Mysql、A...
  • lihaojie1996
  • lihaojie1996
  • 2017年04月24日 15:18
  • 1115

笔记本护眼设置——全面攻略(保护视力)(笔者倾情奉献+强烈推荐)

笔记本护眼设置 1. 笔记本图片属性颜色设置 桌面右键—图形属性—高级模式—确定—显示—颜色增强—调整伽马——应用。 默认:亮度0,对比度50,伽马1.0;亮度对比度不用动,将伽马调成0.9或0...
  • angle_11111
  • angle_11111
  • 2017年05月10日 17:24
  • 2709

印象笔记支持MarkDown语法

前言我使用印象笔记来记录自己学习过程中的知识,但是印象笔记有一个大缺点就是不支持MarkDown语法,这是比较坑爹的。虽然有马克飞象可以用来在印象笔记中支持MarkDown,但是毕竟不是免费的东西,而...
  • ProgramChangesWorld
  • ProgramChangesWorld
  • 2016年07月16日 14:29
  • 6446

nodejs学习笔记

  • 2018年01月14日 00:45
  • 434KB
  • 下载

黑马C语言听课笔记

  • 2018年01月12日 17:31
  • 5.28MB
  • 下载

大数据hadoop学习笔记

  • 2018年01月14日 10:21
  • 29.65MB
  • 下载

oracle mysql 笔记

  • 2018年01月11日 10:24
  • 665KB
  • 下载

Linux Shell笔记要点

  • 2018年01月11日 14:53
  • 104KB
  • 下载

java notecase笔记

  • 2018年01月11日 10:17
  • 1.79MB
  • 下载

bootstrap笔记

  • 2018年01月10日 21:23
  • 91KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔记
举报原因:
原因补充:

(最多只允许输入30个字)