Skip to content
liaofei edited this page Jan 20, 2021 · 1 revision

模型

  • 定义

数据库中每一张表对应一个model,model继承\crmeb\basic\BaseModel,BaseModel 继承think/model类

模型类名最好与数据表保持一直,或者相关有意义,比如表eb_user,模型名为User

定义表主键

protected $pk = 'uid';

定义表名

protected $name = 'user';

查询隐藏字段

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 setModel(): string
    {
        return User::class;
    }
}

通过getModel获取model实例

$this->getModel()

就可以配合关联词 wherefieldpagecountfindselect

return $this->getModel()->where([])->field('*')->with(['label'])->page(0, 10)->select()->toArray();

使用$this->search(),传入条件可以配合模型中创建的搜索器一起使用,是查询条件更简介

Clone this wiki locally