【ThinkPHP6.x/微实战】(6)搜索器结合分页

        搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是public类型),方法命名规范为:

searchFieldNameAttr

        FieldName为数据表字段的驼峰转换,搜索器仅在调用withSearch方法的时候触发。

        搜索器的场景包括:

        1.限制和规范表单的搜索条件

        2.预定义查询条件简化查询

        举个例子,在如下的页面中,如果搜索字段全部为空,则应该显示数据的全部内容(即不进行搜索)。

        首先,我们先在控制器中添加withSearch方法:

return View::fetch('index',[
    'list' => ModelUser::withSearch(['gender', 'username', 'email'], [
        'gender'    =>  request()->param('gender'),
        'username'    =>  request()->param('username'),
        'email'    =>  request()->param('email')
    ])->paginate(5),
]);

         然后,在资源模型中添加对下列字段的校验:

// Gender搜索器
public function searchGenderAttr($query, $value){
    return $value ? $query->where('gender', $value) : '';
}
// Username搜索器
public function searchUsernameAttr($query, $value){
    return $value ? $query->where('username', 'like', '%'.$value.'%') : '';
}
// Email搜索器
public function searchEmailAttr($query, $value){
    return $value ? $query->where('email', 'like', '%'.$value.'%') : '';
}

         注意:username字段和email字段需要做模糊匹配。接下来结合分页显示。上面的配置中,只能在默认搜索的第一页正常,第二页就丢失搜索条件,此时,我们需要在分页参数中配置  query参数来保存搜索条件:

->paginate([
    'list_rows' => 5,
    'query'    => request()->param() 
])

        其他的细节,在实际的开发中,是交给前端处理的,这里就不再赘述。

        tip:如果打开了tp框架的调试,则在调试对话框中可以查看当前的sql语句。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值