laravel-elokent-只返回唯一值,忽略所有多次出现的值

slsn1g29  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(284)

我有两个数据库表。

  1. |---------------------|------------------|
  2. | Users | Matches |
  3. |---------------------|------------------|
  4. | user_id | match_id |
  5. |---------------------|------------------|
  6. | user_1 |
  7. |------------------|
  8. | user_2 |
  9. |------------------|

user_1 以及 user_2 存在 user_id s。
我现在只尝试检索具有唯一值的所有匹配项。一旦用户id被使用两次,我就不想检索任何包含该id的匹配项。
例子:
匹配项(匹配id、用户1、用户2): 1, 1, 2 2, 1, 3 3, 4, 5 4, 6, 7 5, 7, 8 查询应返回 3, 4, 5 因为它是唯一只包含唯一用户ID的匹配。
我该怎么办?我一直在尝试使用 ->distinct() 但这不起作用,因为它只删除重复项,但我想踢其他项目包含值以及。

plupiseo

plupiseo1#

简单和粗糙,不是一个基于查询的解决方案,但会得到你想要的。

  1. public function strictlyUniqueMatches()
  2. {
  3. $matches = Matches::distinct()->get();
  4. $present = [];
  5. foreach ($matches as $idx => $match) {
  6. if (!isset($present[$match->user_1])) {
  7. $present[$match->user_1] = 0;
  8. }
  9. if (!isset($present[$match->user_2])) {
  10. $present[$match->user_2] = 0;
  11. }
  12. $present[$match->user_1]++;
  13. $present[$match->user_2]++;
  14. }
  15. return $matches->filter(function ($match) use ($present) {
  16. if ($present[$match->user_1] > 1) {
  17. return false;
  18. }
  19. if ($present[$match->user_2] > 1) {
  20. return false;
  21. }
  22. return true;
  23. });
  24. }
展开查看全部

相关问题