tp5 使用技巧(持续更新中...)
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 使用技巧(持续更新中...)的更多相关文章
- fastadmin 后台管理框架使用技巧(持续更新中)
fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...
- linux常用小技巧(持续更新中)
一.设置固定ip地址1.config查看用的是哪一个网卡这是假设用的是eth12.修改dns地址vim /etc/resolv.confsearch 域名地址nameserver 192.168.3. ...
- git使用技巧集合(持续更新中)
git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...
- 《WCF技术剖析》博文系列汇总[持续更新中]
原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...
- PLSQL Developer 11 使用技巧(持续更新)
PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- Atom使用记录(持续更新中)
部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...
- Pig基础学习【持续更新中】
*本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.* Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的,可以作为MapR ...
- Pig语言基础-【持续更新中】
***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.*** Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...
随机推荐
- 查看SQL Server中的锁表及解锁
有时候系统很慢,有可能是SQL Server数据库中某些表被锁定 --查看被锁表(需查多几次,有些临时锁很快会自动解锁): SELECT request_session_id AS spid, OBJ ...
- SpingCloud微服务架构学习(二)之Actuator监控
我们那我们之前编写的服务提供者为例,为项目添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId& ...
- Python基本操作之文件操作
一. 1.文件操作的函数 open("文件名字(路径)",mode="模式",encoding="字符集") 2.模式:r,w,a,r+,w ...
- mysql5.1安装图解教程
mysql5.1安装图解教程 曾经为了要搭建模拟平台,从内地网站学习到台湾网站,其中必不可少的一项就是MySQL,那时候正好普遍用5.1,所以也很习惯用MySQL5.1版本! 下面就以MySQL5.1 ...
- C#正则表达式获取网址的域名(IP)
代码如下: string p = @"(http|https)://(?<domain>[^(:|/]*)"; Regex reg = new Regex(p, Reg ...
- CentOS6.8上安装epel
实验环境: [root@bogon zhi]# uname -a Linux bogon -.el6.i686 # SMP Fri Nov :: UTC i686 i686 i386 GNU/Linu ...
- Verilog分频器的设计
大三都要结束了,才发现自己太多东西没深入学习. 对于偶分频:(计数到分频数的一半就翻转) 注: 图中只用了一个计数器,当然也可以用多个: 图中只计数到需要分频的一半,当然也可计数到更多: 图中从第一个 ...
- Linux远程桌面(三)
上一篇中的vnc配置已经很方便了,这一篇介绍更为简单的xmanager的配置,xmanager画面好一丢丢. Xmanager服务器配置 Linux远程桌面(二):vnc之xi ...
- 使用函数BAPISDORDER_GETDETAILEDLIST读取S/4HANA中Sales Order行项目数据
事务码MM03查看物料主数据,如下图所示的行项目数据,包含物料ID,描述信息,数量,单价等等: 使用如下代码进行行项目读取: DATA: ls_read TYPE order_view, lt_ite ...
- VR社交软件测试-AltspaceVR
该VR社交软件中的主界面主要分为,Events:事件:Activities:多人游戏:Words:别人创建的虚拟世界.进入游戏后可以进入场景与世界各地的人进行交谈,以虚拟3D人物的方式显示用户,具有较 ...