thinkphp 8 的 filter 函数

所属分类:php | 浏览:59 | 发布于 2026-07-01

在thinkphp中有两个filter 函数,一个是数据库查询的filter函数,另外一个是数据集Colletion 的 filter函数。

1、两种filter的区别

  • 简单区分这两个函数:数据库查询的filter() 函数,调用位置在 select() 或 find() 前面;数据库 Collection 的 filter() 函数,调用位置在 select() 或 find() 后面。
  • 数据库filter的作用是“改造数据”,修改字段内容,不减少行数。
  • 数据集Collection的filter的作用是“挑选数据”,会删减行数。

2、数据库 filter 函数使用示例

// 1. 查询filter:只改字段,不删行
$list = Db::table('user')
    ->filter(function($row){
        $row['name'] = strtoupper($row['name']);
        return $row;
    })
    ->select();

3、数据集 Collection 的filter 函数使用示例

// 2. 集合filter:内存里删掉未成年
$list = $list->filter(function($row){
    return $row['age'] >= 18;
});

4、model filter 使用示例

$list = User::where('user_id', $params['user_id'])
    ->order('created_time', 'desc')
    ->filter(function ($row) {
        $row['name'] = mb_substr($row['name'], 0, 1) . '***';
        return $row;
    })
    ->select();

5、select() 和 find() 使用示例

// 详情
$detail = User::where('id', $id)
    ->filter(function($item){
        $item['status_name'] = $item['status'] == 1 ? '启用' : '关闭';
        $item['full_avatar'] = env('APP_URL').'/'.$item['avatar'];
        return $item;
    })
    ->find();

// 列表(一模一样的filter回调,可抽成公共函数)
$list = User::filter(function($item){
    $item['status_name'] = $item['status'] == 1 ? '启用' : '关闭';
    $item['full_avatar'] = env('APP_URL').'/'.$item['avatar'];
    return $item;
})->select();

 

 

海涛博客(https://haitaoblog.com)属于海涛个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com W29

备案号:粤ICP备18108585号 友情链接