distinct()with pagination()在laravel 5.2中不起作用

Add*_*Ltd 6 php pagination fluent laravel laravel-5.2

我试图使用distinct()pagination()laravel 5.2与流畅,它给结果正确,但分页保持不变(不一样适用不同).

我已经使用我的代码审查并测试了下面的答案
- laravel 5 - paginate total()的查询与distinct
- Paginate&Distinct
- 查询生成器分页方法计数错误时使用distinct

我的代码是这样的:

DB::table('myTable1 AS T1')
->select('T1.*')
->join('myTable2 AS T2','T2.T1_id','=','T1.id')
->distinct()
->paginate(5);
Run Code Online (Sandbox Code Playgroud)

示例
- 我有三个记录的结果(即POST1,POST2,POST3POST1),所以我申请distinct().
- 现在我的结果是POST1,POST2POST3,但分页仍然显示为4条记录(如果应用之前的结果distinct()).

任何建议将不胜感激!

Gov*_*tla 12

在distinct() 中传递列名。

我连接了多个表并且需要不同的数据。因此,列表与 unique 完美配合,但分页期间的总记录计数是错误的,我落在了这个线程上。后来,我通过在 unique 方法中传递参数来解决这个问题。

DB::table('myTable1 AS T1')
    ->select('T1.*')
    ->join('myTable2 AS T2','T2.T1_id','=','T1.id')
    ->distinct(['T1.id'])
    ->paginate(5);
Run Code Online (Sandbox Code Playgroud)


Gev*_*yan 7

如果可能的话,你可以改变distinct()使用groupBy()


pat*_*cus 5

Laravel似乎存在一些持续存在的问题,并且在分页中使用了distinct。

在这种情况下,当分页确定记录总数时,它将忽略您在select()子句中指定的字段。由于它会忽略您的列,因此独特功能也将被忽略。因此,计数查询变为select count(*) as aggregate from ...

若要解决此问题,您需要告诉分页功能您的列。传递您要选择的列数组作为第二个参数,它将考虑它们的总数。因此,如果您这样做:

/*DB::stuff*/->paginate(5, ['T1.*']);
Run Code Online (Sandbox Code Playgroud)

这将运行以下项的计数查询:

select count(distinct T1.*) as aggregate from
Run Code Online (Sandbox Code Playgroud)

因此,您的查询应类似于:

DB::table('myTable1 AS T1')
    ->select('T1.*')
    ->join('myTable2 AS T2','T2.T1_id','=','T1.id')
    ->distinct()
    ->paginate(5, ['T1.*']);
Run Code Online (Sandbox Code Playgroud)


pra*_*hal -2

不同的正在工作......当您进行连接时,它会检查所有选定列中的不同条目,并且在这里......连接后获得的列名称也包含在连接中......

要运行此程序,请添加select()到您的构建器实例,它应该可以工作:)

DB::table('myTable1 AS T1')
  ->join('myTable2 AS T2','T2.T1_id','=','T1.id')
  ->select('T1.*')
  ->distinct()
  ->paginate(5);
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,请告诉我:)