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