ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 模型 * ## 定义 >数据库中每一张表对应一个model,model继承` app\common\model\BaseModel`,BaseModel 继承think/model类 模型类名最好与数据表保持一直,或者相关有意义,比如表`eb_user`,模型名为`User` ### 定义表主键 ``` public static function tablePk(): string ``` ### 定义表名 ``` public static function tableName(): string ``` ### 查询隐藏字段 ``` protected $hidden = [ 'add_ip', 'account', 'clean_time', 'last_ip', 'pwd']; ``` ### 自动写入字段 ``` protected $insert = ['add_time', 'add_ip', 'last_time', 'last_ip']; ``` ### 修改器(配置自动写入使用) ``` protected function setAddTimeAttr() { return time(); } protected function setAddIpAttr($value) { return app('request')->ip(); } ``` ### 获取器 ``` public function getAddTimeAttr($value) { if(!empty($value)){ return date('Y-m-d H:i:s', (int)$value); } return ''; } ``` ### 一对一关联 ``` //关联分组 public function group() { return $this->hasOne(UserGroup::class,'id','group_id'); } ``` ### 一对多关联 ``` //关联标签 public function label() { return $this->hasMany(UserLabelRelation::class,'uid','uid'); } ``` ### 搜索器 常用的搜索条件,创建模型类时请先定义好 ``` public function searchLikeAttr($query, $value) { $query->where('account|nickname|phone|real_name|uid', 'LIKE', "%$value%"); } ``` * ## 使用 User模型类只通过UserDao使用,模型不在其他模型中混用,或者其他Dao中使用 >dao和model一一对应,也只在对应的dao中使用 在dao中通过`setModel`关联model ``` class UserDao extends BaseDao { protected function getModel(): string { return User::class; } } ``` 通过getModel获取model实例 ``` $this->getModel() ``` 就可以配合关联词 `where`、`field`、`page`、`count`、`find`、`select`等 ``` return $this->getModel()->where([])->field('*')->with(['label'])->page(0, 10)->select()->toArray(); ``` 使用`$this->getSearch()`,传入条件可以配合模型中创建的搜索器一起使用,是查询条件更简介