laravel unique() 不适用于分页

laravel unique() dont work with paginating

我在 laravel 5.7.28 中遇到了一个问题,我正在尝试获取所有字段的记录并对它们进行分页,遗憾的是我的代码中有一个错误导致注册用户重复 phone number(一个用户自己注册了不止一次,当然我修复了这个错误),现在我正面临一个场景,我想在他们的 [=35 上获取我的(非重复的)不同的用户=],并对它们进行分页。这是一厢情愿的场景:

$users = User::distinct('phone')
->doesntHave('carrierUsers')
->doesntHave('thirdparty')
->latest()->paginate(40);

它 returns 所有用户(具有重复的 phone 号码),似乎不同的功能不受影响,所以我尝试了独特的功能:

$users = User::doesntHave('carrierUsers')
->doesntHave('thirdparty')
->latest()->paginate(40)->unique('phone');

它有效(为了不重复)但破坏了分页功能

$users = User::doesntHave('carrierUsers')
->doesntHave('thirdparty')
->latest()
->unique('phone')
->paginate(40);

我在生成器上遇到未定义函数的错误,这意味着它适用于集合, 我也试过 groupBy(在整个网络上搜索解决方案),直到我使用它时它让我感到困惑

User::doesntHave('carrierUsers')->doesntHave('thirdparty')
->latest()->groupBy('phone')
->paginate(40);

我得到了 SELECT list is not in GROUP BY clause,我应该在我的 groupBy 中使用它在我的 select 语句中的每个短语中的意思(现在是全部 ('*') )吗? 我的意思是我需要所有列,我怎样才能在 groupBy 子句中包含所有这些列?顺便问一下,这是什么意思?

,错误提示:这与 sql_mode=only_full_group_by 不兼容。她让这件事发生了吗?我该如何解决? 1)请原谅我的英语 2) 感谢阅读全文 3) 很高兴回复和帮助我

问题 1:使用 distinct

对于distinct()方法,不支持传递参数,所以distinct(phone)不会起作用。

您可以改用->select('phone')->distinct()。但是,支持唯一列是 selected.

问题 2:使用分组依据

所以如果你想select所有列和唯一一列,你可以使用group by.

并且因为您使用的是 mysql 5.7+.

The ONLY_FULL_GROUP_BY and STRICT_TRANS_TABLES modes were added in MySQL 5.7.5.

因此,如果您 select 所有列并将一列分组,您将收到 only_full_group_by 错误。

有两个选项可以解决这个问题。

解决方案1:

使用ANY_VALUE()

User::doesntHave('carrierUsers')->doesntHave('thirdparty')
->latest()
->selectRaw('phone, ANY_VALUE(id) AS id, ANY_VALUE(username) AS username, ...')
->groupBy('phone')
->paginate(40);

解决方案2:

在config/database.php配置中,设置严格模式为false(这不是很安全):

'mysql' => [
   'driver' => 'mysql',
   ...
   'strict' => false,
],