首页 > 解决方案 > 如何在 Laravel 中将所有具有共同标题的行组合在一起

问题描述

是否可以通过一个 SQL 查询将所有行实际输出但以非常有组织的 JSON 格式组合在一起?

例如,如果我有一个包含以下列的表:姓氏、名字、地址和电话号码,并且我想根据他们姓氏的第一个字母将这些行组合在一起,这样我就有了一些东西。

{ { letter: 'A', rows: { { lastname: 'Anfar', firstname: 'Peter', address: 'Street city state country', phone_number: '电话号码' },

          {
            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,我想知道是否有办法实现这样的目标

标签: sqllaravel

解决方案


You can use the groupBy()function of the collection.

Add a letter column to your query:

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

and then use groupBy('letter') to group the list

$q->groupBy('letter')

推荐阅读