Сортировка по связям в Laravel
Подскажите по Laravel, а какими способами можно отсортировать по связям ?
query = Advertising::filter($request->all())->where('active', 1)->where('show', 1)->with(
['subscriber', 'typeservices']
)->orderBy(
'created_at', 'DESC'
)->paginate(12);
Для сортировки по связям в Laravel вы можете использовать метод orderBy
с именем связи и полем, которое нужно отсортировать. Например, чтобы отсортировать рекламные объявления по дате создания подписчика, вы можете использовать следующий код:
$query = Advertising::filter($request->all())
->where('active', 1)
->where('show', 1)
->with(['subscriber', 'typeservices'])
->leftJoin('subscribers', 'subscribers.id', '=', 'advertisings.subscriber_id')
->orderBy('subscribers.created_at', 'desc')
->select('advertisings.*')
->paginate(12);
В этом примере мы используем метод orderBy
с именем связи subscriber
и полем created_at
, чтобы отсортировать рекламные объявления по дате создания подписчика. Также мы добавляем связь с таблицей subscribers
, чтобы использовать поле created_at
в сортировке. Кроме того, мы используем метод select
, чтобы выбрать только поля из таблицы advertisings
, чтобы избежать дублирования полей при присоединении таблицы subscribers
.
Если вы хотите отсортировать по нескольким связям, вы можете использовать метод orderBy
несколько раз. Например, чтобы сначала отсортировать рекламные объявления по имени подписчика, а затем по дате создания объявления, вы можете использовать следующий код:
$query = Advertising::filter($request->all())
->where('active', 1)
->where('show', 1)
->with(['subscriber', 'typeservices'])
->leftJoin('subscribers', 'subscribers.id', '=', 'advertisings.subscriber_id')
->orderBy('subscribers.name', 'asc')
->orderBy('advertisings.created_at', 'desc')
->select('advertisings.*')
->paginate(12);
В этом примере мы сначала сортируем по имени подписчика (subscribers.name
), используя порядок сортировки asc
, а затем по дате создания объявления (advertisings.created_at
), используя порядок сортировки desc
.