{{userInfo.nickname}}
用户设置 退出登录

{{wikiTitle}}

Model层详解

模型属于dao层之上,专门处理数据库字段、表名、主键、伪删除等配置。主要存放:模型初始化操作、模型事件操作、模型修改器、获取器、搜索器、模型关联等。

我们在开发中常用的有

模型事件操作、模型修改器、获取器、搜索器、模型关联,尤其是模型关联和搜索器的使用比较广泛

使用搜索器

封装某个字段的查询条件,可以完成一些较为复杂的查询,一个搜索器对应一个特殊的方法,方法命令规范为:

search[fieldName]Attr

fieldName为数据库字段的驼峰转换,搜索器在调用withSearch方法时触发执行

例如需要给User模型定义name字段和时间字段的搜索器可以使用

<?php
namespace app\model;

use crmeb\basic\BaseModel;

class User extends BaseModel 
{
    public function searchNameAttr($query, $value, $data)
    {
        $query->where('name','like', $value . '%');
    }

    public function searchCreateTimeAttr($query, $value, $data)
    {
        $query->whereBetweenTime('create_time', $value[0], $value[1]);
    }    
}

然后,我们可以使用下面的查询

User::withSearch(['name','create_time'], [
        'name'            =>    'think',
        'create_time'    =>    ['2018-8-1','2018-8-5'],
        'status'        =>    1
    ])
    ->select();

使用修改器

通常在写入数组到数据库中,需要把我们添加的字段装换成json格式,这个时候使用修改器就可以在写入之前自动转换成json格式

修改器方法的命令规范为:

set[FieldName]Attr

其中的FieldName为字段驼峰名称

例如User模型定义other修改器

<?php
namespace app\model;

use crmeb\basic\BaseModel;

class User extends BaseModel 
{
    public function setOtherAttr($value)
    {
        return json_encode($value);
    }
}

使用获取器

获取器的作用是对模型例的数据做出自动处理。获取器和修改器配合使用

获取器的命名规范:

get[FieldName]Attr

FileName为数据表字段的驼峰转换。定义了获取器之后会在下列情况下自动触发:

  • 模型的数据对象取值操作 $model->field_name

  • 模型的序列化输出操作 $model->toArray() 或者 toJson

  • 显式调用getAttr()方案$this->getAttr('field_name')

模型和Dao层的关联

定一个User模型,那么Dao也要增加一个UserDao的类来使用操作模型

例如定义User模型

<?php
namespace app\model;

use crmeb\basic\BaseModel;

class User extends BaseModel 
{

}

dao应用模型将在Dao层详解中示例

{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}}) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} {{cateWiki.page_view_num}}人看过该文档
评论(0) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} 248人看过该文档
评论
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}} {{replyIndex == index ? '取消回复' : '回复'}}
评论
{{items.user ? items.user.nickname : '暂无昵称'}} (自评)
{{items.content}}
{{items.create_time}} 删除
{{items.like ? items.like.like_num : 0}} {{replyIndexJ == (index+'|'+indexJ) ? '取消回复' : '回复'}}
评论
目录
  • {{item}}