2017-09-01 58 views
1

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

+0

子用户和父用户在同一个表**用户**表? – Hamelraj

+0

是的。我不想使用雄辩的关系。只要查询建设者 –

+0

先选择以前不在'paren_id'中的用户两次然后随机选择一个需要两个查询? – Hamelraj

回答

2

尝试这些

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(); 

在这里,您将在随机的方式,其外观DBparent_id是小于2倍

希望这将有助于让parent_id您。

+0

我在找什么!非常感谢!对不起,最后一个问题。现在刚刚出现。如果我想这样做,我将如何做同样的查询。用户引用一个孩子(新用户),但已经有两个孩子,所以我想检查哪两个孩子没有两个孩子,所以我会让这个孩子成为新用户的父母? –

+2

尝试'User :: where('parent_id',$ parent_id) - > select('id') - > groupBy('parent_id') - > havingRaw('COUNT(*)> 1') - > inRandomOrder() - > first();' –

+2

如果记录存在,那么这个特定的父母有2个孩子 –

0

这是我的建议,而不是通过查询找出Builder中更好地使“PARENT_ID”列独特的,以及你可以做功能验证为 -

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

希望这会帮助你。

+0

这不是我想要使用它的上下文。我正在创建一个侦听器来侦听新的用户注册事件。当一个新用户注册时,我想将一个没有超过两个孩子的随机用户分配给这个新用户作为他的父母。因此,我将查询数据库中任何没有在其父ID字段中出现两次ID的随机用户 –

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

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

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