【问题标题】:Laravel Query builder how to check if an item appears twiceLaravel Query builder如何检查一个项目是否出现两次
【发布时间】:2017-09-01 04:09:19
【问题描述】:

好的,我想使用 Laravel 查询构建器来检查特定用户的名称是否在列中出现两次。例如,在我的程序中,当一个新用户注册时,他被随机分配给该用户作为该用户的孩子。所以新用户将有一个类似 parent_id 的字段。一个用户不能有两个以上的孩子,所以我想使用查询生成器查询我的数据库,以获取任何 ID 不会在 parent_id 列中出现两次的随机用户

【问题讨论】:

  • 子用户和父用户在同一个表user表?
  • 是的。我不想使用雄辩的关系。只需查询建设者
  • 先选择以前不在paren_id的用户两次然后随机选择一个需要两次查询???

标签: php sql laravel laravel-5.4


【解决方案1】:

试试这些

User::select('id', DB::raw('COUNT(*) as count'))
    ->groupBy('parent_id')
    ->having('count', '<' , 2)
    ->inRandomOrder()->first();

或更短的方式

User::select('id')->groupBy('parent_id')->havingRaw('COUNT(*) < 2')->inRandomOrder()->first();

在这里你会随机得到parent_id,它在DB中作为parent_id出现的次数少于2次

希望这会对你有所帮助。

【讨论】:

  • 我在找什么!!!非常感谢!对不起,最后一个问题。现在才出现。如果我想这样做,我将如何进行相同的查询。一个用户指的是一个孩子(新用户),但已经有两个孩子,所以我想检查两个孩子中的哪一个没有两个孩子,所以我会让那个孩子成为新用户的父母?
  • 试试User::where('parent_id',$parent_id)-&gt;select('id')-&gt;groupBy('parent_id')-&gt;havingRaw('COUNT(*) &gt; 1')-&gt;inRandomOrder()-&gt;first();
  • 如果记录存在,那么特定的父母有 2 个孩子
  • 谢谢,我很感激。我也可以做一些类似的事情 - > havingRAW('COUNT(*) > 2) 这样它就给了我一个没有两个孩子的父母
【解决方案2】:
User::where('parent_id', $someId)->count();

我认为这是您要查找的查询。它返回id 用作parent_id 的次数。然后你可以使用if 语句来检查它是否小于两个。

您可以使用循环和随机数生成器来获取随机的$someId

【讨论】:

    【解决方案3】:

    这是我的建议,与其通过查询生成器找出,不如让“parent_id”列独一无二,并且您可以在函数中进行验证 -

    'parent_id' => 'required|unique:users'
    

    希望这会对你有所帮助。

    【讨论】:

    • 这不是我想使用的上下文。我正在创建一个侦听新用户注册事件的侦听器。当一个新用户注册时,我想将一个不超过两个孩子的随机用户分配给这个新用户作为他的父母。因此,我将在数据库中查询任何没有其 ID 在父 ID 字段中出现两次的随机用户
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2020-09-09
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2019-08-11
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多