{{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 ? '评论从旧到新':'评论从新到旧'}}
98人看过该文档
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}}
{{replyIndex == index ? '取消回复' : '回复'}}
搜索结果
为您找到{{wikiCount}}条结果
位置:{{path.name}} {{(i+1) == item.catalogue.path_data.length ? '':'/'}}
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}