全域性定義
通用的功能,直接在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 協議》,轉載必須註明作者和本文連結