模型属于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层详解中示例
Was this helpful?
0 / 0