Как сгруппировать строки, все из которых имеют общий заголовок в Laravel

#sql #laravel

#sql #laravel

Вопрос:

Возможно ли сгруппировать строки вместе, где все строки фактически выводятся, но в очень организованном формате JSON с одним SQL-запросом?

Например, если у меня есть таблица со столбцами: фамилия, имя, адрес и номер телефона, и я хотел сгруппировать строки вместе на основе первых букв их фамилии, чтобы у меня что-то было.

{ { буква: ‘A’, строки: { { фамилия: ‘Anfar’, имя: ‘Peter’, адрес: ‘Улица, город, штат, страна’, номер телефона: ‘номер телефона’ },

           {
            lastname: 'Akon',
            firstname: 'Clide',
            address: 'Street city state country',
            phone_number: 'user_phone_number'
          },
          {
            lastname: 'Abel',
            firstname: 'Nigel',
            address: 'Street city state country',
            phone_number: 'phone number'
          },
    }
},

{
   letter: 'B',
      rows: {
          {
            lastname: 'Best',
            firstname: 'Peter',
            address: 'Street city state country',
            phone_number: 'phone number'
          },

          {
            lastname: 'Bide',
            firstname: 'Clide',
            address: 'Street city state country',
            phone_number: 'user_phone_number'
          },
          {
            lastname: 'Biden',
            firstname: 'Nigel',
            address: 'Street city state country',
            phone_number: 'phone number'
          },
    }
}
  

}

Я использую laravel и хочу знать, есть ли способ добиться чего-то подобного

Комментарии:

1. Не с SQL, нет. Но вы могли бы использовать класс коллекции Laravel.

Ответ №1:

Вы можете использовать groupBy() функцию коллекции.

Добавьте letter столбец в свой запрос:

 $q = User::query()
      ->selectRaw('LEFT(lastname,1) AS letter, lastname')
      ->get();
  

а затем используйте groupBy('letter') для группировки списка

 $q->groupBy('letter')