Thinkphp 6.0模型的搜索器和数据集

本节课我们来学习模型中的用于封装的搜索器和数据结果集的操作。

一.模型搜索器

1. 搜索器是用于封装字段(或搜索标识)的查询表达式,类似查询范围;

2. 一个搜索器对应模型的一个特殊方法,该方法为 public;

3. 方法名的命名规范为:searchFieldAttr();

4. 举个例子,我们要封装一个邮箱字符模糊查询,然后封装一个时间限定查询;

5. 在 User 模型端,我创建两个对外的方法,如下:

public function searchEmailAttr($query, $value, $data)
{
$query->where('email', 'like', $value.'%');
}
public function searchCreateTimeAttr($query, $value, $data)
{
$query->whereBetweenTime('create_time', $value[0], $value[1]);
}

6. 然后,在控制器端,通过 withSearch()方法实现模型搜索器的调用;

$result = UserModel::withSearch(['email', 'create_time'],[
'email' 
=> 'xiao',
'create_time' 
=> ['2014-1-1', '2017-1-1']
])->select();

7. withSearch()中第一个数组参数,限定搜索器的字段,第二个则是表达式值;

8. 如果想在搜索器查询的基础上再增加查询条件,直接使用链式查询即可;

UserModel::withSearch(...)->where('gender', '女')->select()

9. 如果你想在搜索器添加一个可以排序的功能,具体如下:

public function searchEmailAttr($query, $value, $data)
{
$query->where('email', 'like', $value.'%');
if (isset($data['sort'])) {
$query->order($data['sort']);
}
}
$result = UserModel::withSearch(['email', 'create_time'],[
'email' 
=> 'xiao',
'create_time' => ['2014-1-1', '2017-1-1'],
'sort' 
=> ['price'=>'desc']
])->select();

10. 搜索器的第三个参数$data,可以得到 withSearch()方法第二参数的值;

11. 字段也可以设置别名:'create_time'=>'ctime'

二.模型数据集

1. 数据集也是直接继承 collection 类,所以和数据库方式一样;

2. 数据集对象和数组操作方法一样,循环遍历、删除元素等;

3. 判断数据集是否为空,我们需要采用 isEmpty()方法;

$resut = UserModel::where('id', 111)->select();
if ($resut->isEmpty()) {
return '没有数据!';
}

4. 更多数据集方法,直接参考数据库那篇的表格即可;

5. 使用模型方法 hidden()可以隐藏某个字段,使用 visible()显示只某个字段;

6. 使用 append()可以添加某个获取器字段,使用 withAttr()对字段进行函数处理;

$result = UserModel::select();
$result->hidden(['password'])->append(['nothing'])->withAttr('email',
function ($value) {
return strtoupper($value);
});
return json($result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值