- A+
如果我们把所有的数据处理 逻辑处理统统统一在模型类中,那么你的程序核心就是可以说模型。
既然模型如此重要,我们可以把更大的复用代码封装在基类中,增加开发速度,这样也可以减少代码的bug率。
模型基类的建立
在common模块下,common/model 下建立 Base.php ,并在文件中将其设置为抽象类以及继承thinkphp5的model类。
namespace app\common\model; abstract class Base extends Model { }
基类的分层
例如:我们往往需要记录一些操作日志在数据库中,可以建立 BaseLog.php,并继承Base.php。其余需要记录日志的 模型只需继承 BaseLog 即可。
namespace app\common\model; abstract class BaseLog extends Base { }
接下来,我们可以把一些公用的方法封装在 Base.php 中,供其余模型调用。
获取主键
private $primary_key; protected function initialize() { parent::initialize(); $this->primary_key = $this->getPk(); }
添加/编辑数据
/** * 保存/编辑数据 * @param array $data 数据 * @param bool $allow 是否过滤字段 * @return false|int * @author <721001522@qq.com> */ public function editData($data, $allow = TRUE) { if (isset($data[$this->primary_key ])) { if (is_numeric($data[$this->primary_key ]) && $data[$this->primary_key ] > 0) { $save = $this->allowField($allow)->save($data, [$this->primary_key => $data[$this->primary_key]]); } else{ $save = $this->allowField($allow)->save($data); } } else{ $save = $this->allowField($allow)->save($data); } return $save; }
添加/编辑并返回主键
/** * 保存/添加数据 * @param array $data * @param bool $allow * @return false|int|mixed * @author <721001522@qq.com> */ public function createData($data, $allow = true) { if (isset($data[$this->primary_key ])) { if (is_numeric($data[$this->primary_key ]) && $data[$this->primary_key ] > 0) { $save = $this->allowField($allow)->save($data, [$this->primary_key => $data[$this->primary_key ]]); return $save; } else{ unset($data[$this->primary_key ]); $res = self::create($data, $allow); $save = $res->getData(); return $save[$this->primary_key ]; } } else { $res = self::create($data, $allow); $save = $res->getData(); return $save[$this->primary_key ]; } }