В 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для заказа продуктов в порядке убывания на основе цены, облагаемой налогом.