tp5 使用技巧(持续更新中...)

1、自动写入时间 create_time和update_time

使用save方法才行,insert方法不生效,不知为何

2、过滤字段 allowfield和strict方法
    allowfield()方法配合save方法,
    strict()方法配合insert方法,

搭配使用,不知怎的,交叉就不能过滤字段了

3、跨模型,有点像是远程一对多关联的替代

 $list = self::with(['album','album.Image'])
->where('type','neq',2)//合伙人不显示
->where($where)
->order("type DESC,login_num DESC")
->page($page, $pageSize)
->select();

 4、模型事件,参考文档:tp5的事件

 //修改事件
protected static function init()
{
//如有变更积分
self::beforeUpdate(function ($row) {
$changedata = $row->getChangedData();
if (isset($changedata['score'])) {
$origin = $row->getOriginData();
ScoreLog::create(['user_id' => $row['id'], 'score' => $changedata['score'] - $origin['score'], 'before' => $origin['score'], 'after' => $changedata['score'], 'memo' => '商城分红改变积分']);
}
});
}

调用方式如下:

 $score = bcmul($bonus,$vvv);
if ($score) {
$row = $user_model->get($kkk);
$data = $row->getOriginData();
$score_before = $data['score'];
$row->validate(false)->allowField(true)->save(['score'=>$score + $score_before]);
}

如果想要在模型事件里增加传参,只需要往$row对象里多赋值一个属性就好了

5、全局查询范围

在手册中,从5.0.4开始,支持各种事件查询,包括add、update、delete以及select、find,示例4就是一个简单的before_update事件,但是before_select不知为何没效果(有效果后续再改,哈哈)

所以,遇到该模型查询条件一致的时候,就用到了base()方法

     // 定义全局base
protected function base($query)
{
$query->where('1=1');
}

在手册中,也有关于全局查询范围的说明:查询范围

在此补充一下,之前遇到一种情况,就是一开始没加delete_time,后来又加上了,但是接口没加啊,如果每个查询接口改太费劲了,因为还有关联,如果查询都是从model获取数据的话,那还简单,但是遇到model一多也费劲,所以全局查询范围的优点就显示出来了,可以在接口model继承的basemodel中,统计增加一个base方法(起名就是base,别的不认),代码如下:

 /**
* 设置全局查询范围
* author:cyf
* time:2020-01-03 20:39
* @param $query
*/
public function base($query)
{
$fields = $query->getTableFields();
if (in_array('delete_time',$fields)) {
$query->where($query->getTable().'.delete_time is null or '.$query->getTable().'.delete_time = 0');
}
}

备注:$query->getTableFields();//获取当前数据表字段信息,$query->getTable();//获取当前数据表名称,带前缀的,详细可以(new query())->getTable()查看

tp5 使用技巧(持续更新中...)的更多相关文章

  1. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  2. linux常用小技巧(持续更新中)

    一.设置固定ip地址1.config查看用的是哪一个网卡这是假设用的是eth12.修改dns地址vim /etc/resolv.confsearch 域名地址nameserver 192.168.3. ...

  3. git使用技巧集合(持续更新中)

    git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...

  4. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  5. PLSQL Developer 11 使用技巧(持续更新)

    PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...

  6. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. Atom使用记录(持续更新中)

    部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...

  8. Pig基础学习【持续更新中】

    *本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.* Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的,可以作为MapR ...

  9. Pig语言基础-【持续更新中】

      ***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.***   Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...

随机推荐

  1. Maven常用插件整理

    maven内置变量 ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${basedir}; ${proj ...

  2. 一张图看懂offsetX, clientX, pageX, screenX的区别

    1.具体含义见下图1 2.浏览器的兼任情况

  3. HTML文本格式化用法

    1.HTML 文本格式化标签 标签 描述 <b> 定义粗体文本 <em> 定义着重文字,显示为斜体 <i> 定义斜体字 <small> 定义小号字 &l ...

  4. 什么是TOPO学

    拓扑,一个跟门萨同样古怪的“科技Word”.其定义,对绝大多数读者而言,不一定需要理解,但无妨知道———拓扑学,数学的一门分科,研究几何图形在一对一的双方连续变换下不变的性质.不少门萨题,来自拓扑学, ...

  5. Excel 解析 (大文件读取)BingExcel

    最近在整理一个excel读取与写出的orm框架.使用的saxreader方式,支持百万级别的excel读取. 并且在通常使用中提供了监听的读取方式.如感兴趣的朋友可以稍微了解下 ,项目地址https: ...

  6. 小米手机连接adb只显示List of devices attached

    使用appium的过程中,与同事交换了下手机,突然连接adb只提示List of devices attached,没有内容了咩~ 后来看到C大的帖子,http://blog.cofface.com/ ...

  7. sqlalchemy使用tip

    https://docs.sqlalchemy.org/en/latest/orm/tutorial.html http://docs.sqlalchemy.org/en/latest/core/sq ...

  8. [topcoder]SRM 646 DIV 2

    第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...

  9. chrome浏览器设置12px以下字体大小

    内容很简单 在 body 上添加一个 css 属性即可. .body { -webkit-text-size-adjust: none; } 结束,晚安!

  10. ubuntu 显示隐藏文件

    原文链接 http://blog.csdn.net/happyjiahan/article/details/6023496 方法1.使用命令ls -a显示所有的文件,包括隐藏文件 方法2.在桌面化操作 ...