Упорядочение результатов запроса Laravel по измененным атрибутам: примеры и код

В Laravel вы можете использовать предложение «order by» для сортировки результатов запроса к базе данных. Однако если вы определили мутаторы в своих моделях Eloquent, которые представляют собой методы, позволяющие изменять значения атрибутов при доступе к ним или их установке, вы можете столкнуться с некоторыми проблемами при попытке упорядочить результаты на основе этих измененных мутатором атрибутов.

Чтобы упорядочить результаты по измененному мутатором атрибуту в Laravel, вы можете использовать метод orderByRawвместе с именем мутатора. Вот пример:

$users = User::orderByRaw('CONCAT(first_name, " ", last_name) ASC')->get();

В этом примере мы предполагаем, что у вас есть модель Userс атрибутами first_nameи last_name, и вы определили мутатор с именем

code>getFullNameAttribute, который объединяет имя и фамилию.

Метод orderByRawпозволяет вам писать необработанные выражения SQL как часть критериев упорядочивания. В этом случае мы используем CONCATдля объединения атрибутов first_nameи last_name, а затем упорядочиваем результаты в порядке возрастания на основе полного имени.

Вот альтернативный пример, где мутатор изменяет атрибут другим способом:

$products = Product::orderByRaw('price * 1.15 DESC')->get();

В этом примере мы предполагаем, что у вас есть модель Productс атрибутом priceи вы определили мутатор под названием getTaxedPriceAttribute, который возвращает цена с добавленным налогом 15%. Мы используем orderByRawдля заказа продуктов в порядке убывания на основе цены, облагаемой налогом.