Dai Chong's blog

tp5的模型事件只有在调用模型方法的时候生效,使用查询构造器是无效的。

引言TP5官网

也就是说,不实例化模型进行操作before_insert这个方法是不执行的。

模型的意义就是为了简化控制器操作,简化逻辑处理,提升代码的整洁度和可读性。这样一来模型事件起到了至关重要的作用。

这篇文章就介绍一下模型事件‘before_insert’事件对于下单逻辑的帮助。

模型ShopOrder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
namespace app\common\model;
use think\Model;
use daichongweb\helper;
class ShopOrderM extends Model
{
protected $table = 'shop_text';

protected static function init()
{
self::beforeInsert(function($ShopOrderM){
//创建订单号
$ShopOrderM['orderno'] = helper::buildOrderno('T', 'shop_text'); $ShopOrderM['name'] = $ShopOrderM['name'].'1';//处理前端传过来的数据进行操作
return $ShopOrderM;
},true);
}
}

控制器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
namespace app\api\controller;
use daichongweb\helper;
use think\response\Json;
use think\Db;
use think\facade\Request;
use think\facade\Cache;
use app\api\controller\ShopMain;
/**
* 商城下单接口
*/
class ShopOrder{

//下单测试
public function orderText()
{
$info = input();
//验证器
$validate = new \app\common\validate\ShopOrderV();
if(!$validate->check($info)) {
return new Json([
'code' => 1,
'message' => $validate->getError(),
]);
}
$shopOrder = new \app\common\model\ShopOrderM();
$shopOrder->save($info);
}
}

从控制器的代码可以看出,控制器的逻辑处理只有接收数据、验证、执行插入。
生成订单、处理数据全部放在模型的新增前处理。
$ShopOrderM[‘name’] = $ShopOrderM[‘name’].’1’;这里就是自动向数据表的name插入数据。


 评论