如何逐个组地获取前两个数据并在laravel上按一个列序列排序

时间:2018-04-03 03:04:09

标签: laravel group-by query-builder laravel-query-builder

a16s表

id p_id u_id trust time
1   1   1      1    1
2   1   2      1    2
3   1   3      0    3
4   1   4      0    4
5   1   5      0    5
6   2   1      0    1
7   2   2      1    2
8   2   5      0    3
9   2   6      0    4
10  3   2      1    1
11  3   5      1    2
12  3   8      1    3

我想得到 p_id组在信任组上的前两个数据,依次由信任显示数据

id  p_id    u_id    trust   time
1   1        1          1   1
2   1        2          1   2
4   1        4          0   4
5   1        5          0   5
7   2        2          1   2
6   2        1          0   1
8   2        5          0   3
10  3        2          1   1
11  3        5          1   2

我尝试查询

  $result = DB::table('a16s')
            ->select ('id','p_id','u_id','trust','time'))
            ->orderBy('time', 'desc')
            ->get()
            ->groupBy('p_id')
            ->get()
            ->groupBy('trust','desc')
            ->map(function ($deal) {
              return $deal->take(2);
              });


    echo '<pre>' ;
    print_r($result);

我收到了错误 Symfony \ Component \ Debug \ Exception \ FatalThrowableError(E_RECOVERABLE_ERROR) 类型错误:函数Illuminate \ Support \ Collection :: get()的参数太少,在第48行的D:\ AppServ \ www \ comefour \ app \ Http \ Controllers \ CodoController.php中传递0,并且至少有1个预期

1 个答案:

答案 0 :(得分:0)

在您的第一个 - &gt; get()之后,db查询将转换为集合。

collection get需要一个密钥作为参数。

->get()放在构建器查询的末尾。

像这样:

$result = DB::table('a16s')
        ->select ('id','p_id','u_id','trust','time'))
        ->orderBy('time', 'desc')
        ->groupBy('p_id') // end of query
        ->get() // get the collection
        ->groupBy('trust','desc')
        ->map(function ($deal) {
          return $deal->take(2);
          });