#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')