ThinkPHP 5 模型使用历程 - 全局定义
通用的功能,直接在Base里定义,有以下几种:
属性定义
class MTBase extends Model
{
/**
* @var string 时间类型
*/
protected $autoWriteTimestamp = 'datetime';
/**
* @var string 时间格式化
*/
protected $dateFormat = 'Y-m-d H:i:s';
/**
* @var string 设置返回数据集的对象名
*/
protected $resultSetType = 'collection';
}
获取器
class MTBase extends Model
{
/**
* 字段转换 * * @param null $value 默认是NULL
* @param array $data 查询结果数据
*
* @return string 转换后值
*/
public function getTypeTextAttr($value, $data)
{
if ($value) {
return $value;
}
if (!isset($data['type'])) {
return $value ?? '';
}
return LTMapField::valueToText($this->table, 'type', $data['type']);
}
}
缓存
class MTBase extends Model
{
/**
* 生成列表缓存
*
* @param array $map 查询条件
* @param string $key 数组键值对应字段
*
* @return array
*/
public static function getCacheList($map = [], $key = 'id')
{
$args = json_encode(func_get_args(), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$file_name = md5(static::class . '_' . __FUNCTION__ . '_' . $args);
return FCache::tagRemember(static::class, $file_name, function () use ($map, $key) {
$model = new static();
$list = $model->where($map ?: [['status', '<', 9999]])->order('sort desc')->select();
$result = [];
/** @var MTBase $row */
foreach ($list as $row) {
$result[$row->$key] = $row->toArray();
}
return $result;
});
}
}
观察者
class MTBase extends Model
{
/**
* 注册事件
*/
protected static function init()
{
//自动加载观察者类
$event_class = str_replace('model\table\MT', 'model\event\ME', static::class);
/* 匹配到了 */
if ($event_class != static::class) {
if (class_exists($event_class)) {
static::observe($event_class);
} else {
static::observe(MEBase::class);
}
} else {
static::observe(MEBase::class);
}
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接