Laravel 5.4 显示重复和替换随机行的Laravel分页

Laravel 5.4 显示重复和替换随机行的Laravel分页,laravel-5.4,laravel-pagination,Laravel 5.4,Laravel Pagination,我使用的是带有分页的Laravel5.4,我遇到了一个问题,数据库中的一行显示了两次,一次出现在4个页面中的两个页面上。但当我删除行时,这两个行都被删除,但使用计数的行总数仅显示-1,然后我看到以前隐藏/替换的行 见以下数据: 直接从数据库中设置查询以显示所有这些行+ 查询: 下面是一个分页,最大值为60,这样所有行都显示在一页上,而不是拆分为4行。在这里,它正确显示所有行,就像在数据库中执行原始SQL一样: 有没有办法解决这个问题?这肯定是一个bug,而不是我的坏代码?为了避免显示重复的代

我使用的是带有分页的Laravel5.4,我遇到了一个问题,数据库中的一行显示了两次,一次出现在4个页面中的两个页面上。但当我删除行时,这两个行都被删除,但使用计数的行总数仅显示-1,然后我看到以前隐藏/替换的行

见以下数据:

直接从数据库中设置查询以显示所有这些行+ 查询:

下面是一个分页,最大值为60,这样所有行都显示在一页上,而不是拆分为4行。在这里,它正确显示所有行,就像在数据库中执行原始SQL一样:


有没有办法解决这个问题?这肯定是一个bug,而不是我的坏代码?

为了避免显示重复的代码,请在查询中添加一个
distinct()
子句:

$faultyDevices = FaultyDevice
    ::distinct()
    ->where('status', '<>', 3)
    ->where('status', '<>', 4)
    ->where('status', '<>', 5)
    ->where('status', '<>', 6)
    ->where('status', '<>', 7)
    ->orderBy('created_at', 'asc')
    ->paginate(18, ['*'], 'faults_page');
$faultyDevices=faultyDevices
::独特的()
->其中('状态','',3)
->其中('状态','',4)
->其中('状态','',5)
->其中('状态','',6)
->其中('状态','',7)
->orderBy('created_at','asc')
->分页(18,['*'],'faults_page');

您确定在单击更改页面时没有更新表吗?基本上,Laravel只是计算完整搜索的行数,并根据该数字和要显示的页面设置
offset
limit
。工作的那一部分不可能有bug


但是,如果在打印分页后插入了一些新行,那么当您导航到下一页时,将看到上一页的行。这是正常的,除非根据
id
而不是行
count()

创建新的分页系统,否则无法避免这种情况。这是因为在
值处创建了许多具有相同
的记录。要解决此问题,请添加第二个order by id以删除重复的分页显示:

$faultyDevices = FaultyDevice::
    where('status', '!=', '3')
    ->where('status', '!=', '4')
    ->where('status', '!=', '5')
    ->where('status', '!=', '6')
    ->where('status', '!=', '7')
    ->orderBy('created_at', 'asc')
    ->orderBy('id', 'asc')
    ->paginate(18, ['*'], 'faults_page');

恐怕这不是问题所在。请仔细看看这个问题。数据库中没有重复项,因此在不同的页面上显示相同的项目是非常困难的。。古怪的如果我在一个较大的页面上显示所有行(分页60等,而不是18等),则不会显示该项目两次。在拆分页面之前,Laravel的工作一直很出色。正如您所看到的,LaaLip分页是由AT创建的,因此,新插入将永远不会出现在中间——不管怎样,我已经把这个移到了我的测试环境中,没有新的插入,即使它确实插入,插件本身也是唯一的。我们所称的同一个“设备”永远不会有两个状态相同的列表,因此不会出现重复。检查提供的两张图片,你会发现它们不同,即使是相同的数据,甚至是相同的laravel查询。这听起来很可能。我认为laravel不应该因为页面的不同而有不同的订购方式,不管相同的创建值是多少,但我明白这可能就是问题所在。因为没有人知道这一点,所以我已经在另一个使用jquery的datatable中显示了数据,因此问题不再出现——所以我无法确认。不过,听起来很有可能!此命令与laravel无关,但与数据库引擎Gotcha相关。想不到没有内置的方法总是以相同的顺序显示项目,即使它们在订单上是相同的。谢谢
$faultyDevices = FaultyDevice
    ::distinct()
    ->where('status', '<>', 3)
    ->where('status', '<>', 4)
    ->where('status', '<>', 5)
    ->where('status', '<>', 6)
    ->where('status', '<>', 7)
    ->orderBy('created_at', 'asc')
    ->paginate(18, ['*'], 'faults_page');
$faultyDevices = FaultyDevice::
    where('status', '!=', '3')
    ->where('status', '!=', '4')
    ->where('status', '!=', '5')
    ->where('status', '!=', '6')
    ->where('status', '!=', '7')
    ->orderBy('created_at', 'asc')
    ->orderBy('id', 'asc')
    ->paginate(18, ['*'], 'faults_page');