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. C#委托(一)——说明及举例

    C#命名空间下有五种类型,分别为: 类.构造.接口.枚举.委托. 委托被定义为5中基本类型的一种,也就意味着代码可以这么写: using System; namespace Test { delega ...

  2. PHP+phpMyAdmin编程插入数据显示中文乱码的问题

    相信初学php的同学应该都会试一些小程序,比如从input文本框输入数据后点击提交,数据自动插入数据库保存. 但是如果是输入中文提交,不经过一定配置,在phpMyAdmin中就会显示乱码.什么%ez. ...

  3. (开发)bable - es6转码

    参考:http://www.ruanyifeng.com/blog/2016/01/babel.html Babel Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执 ...

  4. Android Studio 小技巧(1):如何导入AAR文件

    1. 导入AAR.JAR文件 File- > New -> New Module 这样子AAR文件就导入了,然后在app中的build.gradle中做如下添加 dependencies ...

  5. 栅格那点儿事(一)---Raster是个啥子东西

    Raster是个啥子东西 现如今,不仅是在遥感应用中能看到花花绿绿的影像了,在GIS应用中也能随处看到她们的身影.在各种在线地图中,卫星影像作为底图与矢量的道路层叠加:高程DEM作为高程来源实现地形的 ...

  6. xcode import pod 文件不提示

    在使用第三方类库时,使用cocoaPods是非常方便的,具体使用方法可以参考:CocoaPods安装和使用教程 的安装使用方法.今天讨论的问题是,我在使用的时候遇到了一些问题:用cocoaPod si ...

  7. 爱上python(几个小例子)

    1.任务:简单测试局域网中的网络是否连接,ip范围:192.168.2.101到192.168.2.200. python 实现代码: import subprocess cmd="cmd. ...

  8. bootstrap-table 大量字段整体表单上传之时间处理

    js 中用$('#addUserForm').serialize(),//获取表单中所有数据 传送到前台 (controller) $.ajax({ type : "POST", ...

  9. 笨办法学Python(二十五)

    习题 25: 更多更多的练习 我们将做一些关于函数和变量的练习,以确认你真正掌握了这些知识.这节练习对你来说可以说是一本道:写程序,逐行研究,弄懂它. 不过这节练习还是有些不同,你不需要运行它,取而代 ...

  10. 笨办法学Python(七)

    习题 7: 更多打印 现在我们将做一批练习,在练习的过程中你需要键入代码,并且让它们运行起来.我不会解释太多,因为这节的内容都是以前熟悉过的.这节练习的目的是巩固你学到的东西.我们几个练习后再见.不要 ...