Laravel получает следующую / предыдущую запись по определенному столбцу

#laravel #eloquent

#laravel #красноречивый

Вопрос:

У меня есть модель продукта.

Я хочу получить следующий предыдущий продукт, заказанный 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. «мне нужно получить следующую на основе id , но на основе name » … можете ли вы объяснить это подробнее? можете ли вы показать пример данных, которые вы получаете, чтобы показать, почему то, что у вас есть, не соответствует вашим потребностям

Ответ №1:

Ваше условие where также должно быть указано в имени, а не в идентификаторе:

     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();
    }