笔记

原创 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

`

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

相关文章推荐

redis笔记+资料

  • 2017年11月18日 10:52
  • 372KB
  • 下载

计算机笔记

  • 2017年11月14日 12:21
  • 37B
  • 下载

《Switf语言实战入门》读书笔记(1)

初学Swift,毕竟是第一步,可能更新较慢,但会持续更新滴。
  • mouyong
  • mouyong
  • 2015年12月16日 14:03
  • 1837

MIT_线性代数笔记(上)

  • 2017年11月11日 19:43
  • 2.95MB
  • 下载

MIT_线性代数笔记(中)

  • 2017年11月11日 19:45
  • 2MB
  • 下载

JavaScript 语言精粹读书笔记(第四章)

函数的四种调用模式 方法调用 当函数作为一个对象的属性时,被称为方法,当方法被调用时,this被绑定到该对象。方法可以通过this访问对象,this到对象的绑定发生在调用时。 函数调用 当...
  • yukjin
  • yukjin
  • 2015年01月12日 15:53
  • 236

hibernate笔记--云图智联

  • 2017年11月11日 17:24
  • 1.3MB
  • 下载

嵌入式系统设计师软考备考笔记

  • 2017年11月10日 09:02
  • 654KB
  • 下载

Android笔记:详解接口回调(interface/abstract)的用法

Android java 接口回调

崔希凡javaweb笔记day14-day17

  • 2017年11月09日 17:56
  • 108.29MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔记
举报原因:
原因补充:

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