如果我们把所有的数据处理 逻辑处理统统统一在模型类中,那么你的程序核心就是可以说模型。
既然模型如此重要,我们可以把更大的复用代码封装在基类中,增加开发速度,这样也可以减少代码的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 ];
}
}