Laravel 7如何实现编辑页按字母顺序跳转上下条用户记录?
功能实现方案
你现有代码的核心问题是筛选条件仍使用ID,和排序依据的nombre字段不匹配,无法实现按字母顺序跳转上下条记录的需求,修正逻辑如下:
第一步:修改模型上下条查询方法
// In User Model public function next() { // 优先按nombre字段升序筛选,重名时用id做二次区分避免跳转异常 return User::where('nombre', '>', $this->nombre) ->orWhere(function ($query) { $query->where('nombre', $this->nombre) ->where('id', '>', $this->id); }) ->orderBy('nombre', 'asc') ->orderBy('id', 'asc') ->first(); } public function previous() { // 优先按nombre字段降序筛选,重名时用id做二次区分避免跳转异常 return User::where('nombre', '<', $this->nombre) ->orWhere(function ($query) { $query->where('nombre', $this->nombre) ->where('id', '<', $this->id); }) ->orderBy('nombre', 'desc') ->orderBy('id', 'desc') ->first(); }
第二步:对应业务逻辑调整
- 保存用户后,直接调用当前用户实例的
next()方法,存在下一条记录就跳转至该用户的编辑页,不存在则跳转回用户列表页 - 编辑页的上/下一条按钮,先判断
previous()/next()返回值是否存在,不存在则将按钮置灰不可点击
注意:如果你的数据库nombre字段排序规则为区分大小写的类型,建议调整为utf8mb4_general_ci这类不区分大小写的排序规则,否则会出现大写字母开头的用户名全部排在小写前面的异常
内容的提问来源于stack exchange,提问作者Alexander Cuestas
相关产品推荐
相关产品推荐

