Laravel按特定列获取下一个/上一个记录

时间:2020-09-11 09:09:51

标签: laravel eloquent

我有一个产品模型。

我想获取下一个先前的产品,该产品由name而不是id订购。

这就是我现在拥有的:

    public function getNextAttribute() {
        return FontFamily::select('id', 'name')->where('id', '>', $this->id)->orderBy('name', 'asc')->first() ?? FontFamily::first();
    }

    public function getPreviousAttribute() {
        return FontFamily::select('id', 'name')->where('id', '<', $this->id)->orderBy('name', 'desc')->first() ?? FontFamily::latest()->first();
    }

但是使用orderBy('name')并不能解决问题,因为我接下来要了解的不是基于id,而是基于name

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您的条件也应在名称上,而不在ID上:

    public function getNextAttribute() {
        return FontFamily::select('id', 'name')->where('name', '>', $this->name)->orderBy('name', 'asc')->first() ?? FontFamily::first();
    }

    public function getPreviousAttribute() {
        return FontFamily::select('id', 'name')->where('name', '<', $this->name)->orderBy('name', 'desc')->first() ?? FontFamily::latest()->first();
    }