在 ThinkPHP 8 有一整套**“控制模型行为”的属性**,你掌握这些基本就算把 Model 用透了
我给你按“实际开发最常用”分类讲
🧱 一、表结构 & 基础映射
1️⃣ 表名相关
protected $name = 'work'; // 表名(不带前缀)protected $table = 'tp_work'; // 完整表名(优先级更高)2️⃣ 主键
protected $pk = 'id';👉 如果你不是 id,必须写
3️⃣ 字段定义(你刚问的)
protected $schema = [...];⏱️ 二、时间字段控制(你父类 TimeModel 也在用)
1️⃣ 是否自动写入时间
protected $autoWriteTimestamp = true;2️⃣ 时间字段名
protected $createTime = 'create_time';protected $updateTime = 'update_time';3️⃣ 时间格式
protected $dateFormat = 'Y-m-d H:i:s';👉 默认是时间戳,可以改成字符串
🗑️ 三、软删除控制
use think\model\concern\SoftDelete;protected $deleteTime = 'delete_time';protected $defaultSoftDelete = 0;🔐 四、字段保护(很重要)
1️⃣ 允许写入字段(白名单)
protected $field = ['name', 'price'];2️⃣ 禁止写入字段(黑名单)
protected $disuse = ['id'];3️⃣ 只读字段(不能修改)
protected $readonly = ['create_time'];🔄 五、自动完成(自动写入)
protected $auto = ['status'];protected $insert = ['create_time'];protected $update = ['update_time'];👉 类似:
protected function setStatusAttr() { return 1;}🔁 六、类型转换(比 $schema 更灵活)
protected $type = [ 'status' => 'integer', 'price' => 'float', 'json' => 'array',];👉 自动:
json_encode / json_decode👀 七、隐藏 / 追加字段(接口很常用)
1️⃣ 隐藏字段
protected $hidden = ['password'];2️⃣ 追加字段
protected $append = ['status_text'];配合:
public function getStatusTextAttr($value, $data) { return $data['status'] ? '启用' : '禁用';}🔗 八、关联预加载
protected $with = ['category'];👉 自动 join 查询
🚫 九、全局查询条件(高级)
protected function base($query){ $query->where('status', 1);}👉 所有查询自动带条件
🧪 十、事件(非常强大)
protected static function init(){ self::creating(function ($model) { $model->uuid = uniqid(); }); self::updating(function ($model) { // 更新前 });}🧠 十一、JSON字段支持
protected $json = ['images'];👉 自动数组 ↔ JSON
🎯 总结一张表(你可以收藏)
| 分类 | 属性 |
|---|---|
| 表 | $name $table $pk |
| 字段 | $schema $type |
| 时间 | $autoWriteTimestamp $createTime |
| 删除 | $deleteTime |
| 安全 | $field $disuse $readonly |
| 自动 | $auto $insert $update |
| 输出 | $hidden $append |
| 关联 | $with |
| 事件 | init() |
| JSON | $json |
一个“实战最佳模板”:
class Work extends Model
{
protected $name = 'work';
protected $pk = 'id';
protected $autoWriteTimestamp = true;
protected $createTime = 'create_time';
protected $updateTime = 'update_time';
protected $type = [
'id' => 'integer',
];
protected $hidden = [];
protected $append = [];
}最后
以上就是热心网友最近收集整理的关于ThinkPHP 8有哪些控制模型行为的字段?的全部内容,更多相关ThinkPHP内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复