我有一个db表,其中包含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....
在一次通话中,我希望能够:
指定我需要的资产id。我相信。
按资产id对结果进行分组
只在特定日期或之前获取这些记录
把它们倒过来。我相信我可以使用orderby('id','desc)。
为每个资产标识获取特定数量的记录
我可能需要归还任何数量的资产,从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' => [
.....
.....
],
]
任何帮助都将不胜感激。
谢谢。
1条答案
按热度按时间06odsfpq1#
sql分组用于聚合数据,而不是组织输出。
删除查询生成器groupby方法调用(sql),获取所需的所有行,然后返回一个集合。
然后使用collection方法groupby按资产id组织所有集合。