Tp5;模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的模型类支持before_delete、after_delet
Tp5 模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。
模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的
模型类支持before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为。
快捷注册(V5.0.4+)
V5.0.4+版本开始,系统提供了内置的事件注册的快捷方法,你可以用下面的方式替代
beforeInsert新增前
afterInsert新增后
beforeUpdate更新前
afterUpdate更新后
beforeWrite写入前
afterWrite写入后
beforeDelete删除前
afterDelete删除后
官方demo:
namespace app\index\model;
use think\Model;
class User extends Model
{
protected static function init()
{
User::beforeInsert(function ($user) {
if ($user->status != 1) {
return false;
}
});
}
}
以下是处理商品模板使用方法说明:
model 模型代码:
<?php
namespace app\admin\model;
use think\Model;
class Goods extends Model
{
protected $field=true;
protected static function init()
{
Goods::beforeInsert(function ($goods) {
// 新增前,生成商品主图的缩略图
if($_FILES['og_thumb']['tmp_name']){
$thumbName=$goods->upload('og_thumb');
}
});
Goods::afterInsert(function($goods){
// 新增后,批量写入会员价格
$mpriceArr=$goods->mp;
$goodsId=$goods->id;
db('member_price')->insert(['mlevel_id'=>$k,'mprice'=>$v,'goods_id'=>$goodsId]);
// 处理商品相册
if($goods->_hasImgs($_FILES['goods_photo']['tmp_name'])){
$files = request()->file('goods_photo');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods');
if($info){
$photoName= $info->getFilename();
$ogphoto=date('Ymd').DS.$photoName;
$bigphoto=date('Ymd').DS.'big_'.$photoName;
$midphoto=date('Ymd').DS.'mid_'.$photoName;
$smphoto=date('Ymd').DS.'sm_'.$photoName;
$image = \think\Image::open(IMG_UPLAODS.'goods/'.$ogphoto);
$image->thumb(500, 500)->save(IMG_UPLAODS.'goods/'.$bigphoto);
$image->thumb(200, 200)->save(IMG_UPLAODS.'goods/'.$midphoto);
$image->thumb(70, 70)->save(IMG_UPLAODS.'goods/'.$smphoto);
db('goods_photo')->insert(['goods_id'=>$goodsId,'big_photo'=>'goods/'.$bigphoto,'mid_photo'=>'goods/'.$midphoto,'sm_photo'=>'goods/'.$smphoto,'og_photo'=>'goods/'.$ogphoto]);
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
});
Goods::beforeDelete(function ($goods) {
$goodsId=$goods->id;
// 删除前,删除关联的商品属性
db('goods_attr')->where('goods_id','=',$goodsId)->delete();
});
}
public function upload($imageName){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file($imageName);
// 移动到框架应用根目录/public/uploads/ 目录下
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods');
if($info){
// // 成功上传后 获取上传信息
// // 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
return $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
}
controller 控制器代码:
<?php
namespace app\admin\controller;
use think\Controller;
class Goods extends controller
{
public function add()
{
if(request()->isPost()){
$data=input('post.');
$add=model('goods')->save($data);
if($add){
$this->success('操作成功!','lst');
}else{
$this->error('操作失败!');
}
return;
}
return view();
}
public function del($id)
{
$del=model('goods')->destroy($id);
if($del){
$this->success('操作成功!','lst');
}else{
$this->error('操作失败!');
}
}
}
本文标题为:Tp5 模型事件的使用
基础教程推荐
- PHP命名空间简单用法示例 2022-12-01
- PHP获取MySQL执行sql语句的查询时间方法 2022-11-09
- laravel 解决多库下的DB::transaction()事务失效问题 2023-03-08
- 使用PHP开发留言板功能 2023-03-13
- PHP中的错误及其处理机制 2023-06-04
- php array分组,PHP中array数组的分组排序 2022-08-01
- thinkphp3.2.3框架动态切换多数据库的方法分析 2023-03-19
- 在Laravel中实现使用AJAX动态刷新部分页面 2023-03-02
- PHP实现Redis单据锁以及防止并发重复写入 2022-10-12
- laravel ORM关联关系中的 with和whereHas用法 2023-03-02