我有一个数据库表,其中包含超过1000个资产的记录,每个资产可以有1000个条目。
例如:
ID ASSET_ID MANY_COLUMNS_OF_DATA CREATED_AT
1 345 Stuff 2018-04-01....
....
200 946 Stuff .....
...
3000 345 Stuff 2018-05-01....
....
1000000 925 Stuff 2018-05-01....
在一个电话中,我希望能够:
我可能需要退回从1到n的任意数量的资产。
我玩过各种各样的方法,但是出了一些问题,因为我只得到了一条记录。
例如:
USING THE DB FACADE
$data = DB::table( 'table' )
->whereIn( 'asset_id', $assetIDs )
->groupBy( 'asset_id' )
->having( 'created_at', '<=', $this->dateINeed )
->limit( $numberOfRowsINeed )
->get();
USING ELOQUENT
$data = $modelToRead->whereIn( 'asset_id', $assetIDs )
->groupBy( 'asset_id' )
->where( 'created_at', '<=', $this->dateINeed )
->orderBy( 'id', 'desc' )
->take( $numberOfRowsINeed )
->get();
所以我想返回的是一个数据数组,其中每个资产的记录分别列出,例如:
$data = [
'345' => [
.....
.....
],
'234' => [
.....
.....
],
'123' => [
.....
.....
],
'etc' => [
.....
.....
],
]
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:0)
SQL分组用于聚合数据,而不是用于组织输出。
通过方法调用(SQL)删除查询生成器groupB,获取所需的所有行,并返回一个集合。
$collection = $model->...->get();
然后使用收集方法groupBy按资产ID组织所有收集。
$grouped = $collection->groupBy('asset_id');