Laravel 7 上一条和下一条记录,按字母顺序排列
Laravel 7 previous and next records with alphabetical order
在我的编辑表单中,我想添加一个按钮来保存和编辑以下用户。
我正在尝试让“下一个”按钮按字母顺序转到下一个记录。
我只能通过ID订购
// In a model
public function next(){
return User::where('id', '>', $this->id)->orderBy('nombre','asc')->first();
}
public function previous(){
return User::where('id', '<', $this->id)->orderBy('nombre','desc')->first();
}
您需要使用 mysql 的排名函数和原始查询
之前的记录
\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking < {previous_record_rank} ORDER BY ranking asc limit 1;');
下一条记录
\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking > {previous_record_rank} ORDER BY ranking asc limit 1;');
并且您需要在 config/database.php
中将 mysql.strict 设置为 false
或者
\DB::statement("SET SQL_MODE=''");
在我的编辑表单中,我想添加一个按钮来保存和编辑以下用户。
我正在尝试让“下一个”按钮按字母顺序转到下一个记录。
我只能通过ID订购
// In a model
public function next(){
return User::where('id', '>', $this->id)->orderBy('nombre','asc')->first();
}
public function previous(){
return User::where('id', '<', $this->id)->orderBy('nombre','desc')->first();
}
您需要使用 mysql 的排名函数和原始查询
之前的记录
\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking < {previous_record_rank} ORDER BY ranking asc limit 1;');
下一条记录
\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking > {previous_record_rank} ORDER BY ranking asc limit 1;');
并且您需要在 config/database.php
或者
\DB::statement("SET SQL_MODE=''");