Php 雄辩:获取列值(x)存在于多行(SQL DB)中的所有行

Php 雄辩:获取列值(x)存在于多行(SQL DB)中的所有行,php,eloquent,laravel-5.6,eloquent-relationship,Php,Eloquent,Laravel 5.6,Eloquent Relationship,我想在Laravel的雄辩中执行以下原始SQL查询: 从订单付款中选择不同的用户id,其中用户id在从订单付款中选择用户id,其中付款状态=‘已付款’按用户id分组,计数*>1 在这里,我将where in与属性user\u id一起使用,以便选择同一个表中的所有行order\u payment have payment\u status=payment,并按count>1的属性user\u id分组,最后从给定的用户id集中选择不同的用户id 此查询的总体目标是获取所需列值user_id在本例

我想在Laravel的雄辩中执行以下原始SQL查询:

从订单付款中选择不同的用户id,其中用户id在从订单付款中选择用户id,其中付款状态=‘已付款’按用户id分组,计数*>1

在这里,我将where in与属性user\u id一起使用,以便选择同一个表中的所有行order\u payment have payment\u status=payment,并按count>1的属性user\u id分组,最后从给定的用户id集中选择不同的用户id

此查询的总体目标是获取所需列值user_id在本例中大于1的所有行

例:

上面的原始查询对我来说是可行的,但现在我正在编写一个api,我想知道如何以雄辩的方式复制它


请帮忙

因此,可以使用groupBy和havingRaw方法来实现此查询

我们首先选择需要聚合的列

OrderPayment::选择'user\u id',\DB::raw'COUNTuser\u id作为付款

然后我们根据需要的arribute-groupBy'user_id'进行分组,注意我们分组所依据的属性必须在select语句中,否则这将不起作用

现在,在最后一个子句中,我们查看是否有多行具有相同的用户id,我们使用>havingRaw'COUNTuser\u id>?,[1]

现在,整个雄辩的查询如下所示

OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
    ->groupBy('user_id')
    ->havingRaw('COUNT(user_id) > ?', [1])
    ->get();
请注意,在select子句中,我们将DB raw语句作为字符串传递给查询生成器,因此在SQL注入时应小心

OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
    ->groupBy('user_id')
    ->havingRaw('COUNT(user_id) > ?', [1])
    ->get();