Laravel 查询生成器如何检查一个项目是否出现两次

Laravel Query builder how to check if an item appears twice

好的,我想使用 Laravel 查询构建器来检查特定用户名是否在列中出现两次。例如在我的程序中,当一个新用户注册时,他被随机分配给一个用户作为该用户的 child。所以新用户将有一个像 parent_id 这样的字段。一个用户不能有超过两个 children,所以我想使用查询生成器查询我的数据库,以获取 ID 未在 parent_id 列

中出现两次的任何随机用户

这是我的建议,而不是通过查询构建器找出更好的方法,使 'parent_id' 列尽可能唯一,并且您可以在函数中进行验证 -

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

希望对您有所帮助。

User::where('parent_id', $someId)->count();

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

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

试试这些

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次

希望对您有所帮助。