Eloquent:获取列value(x)存在于多于一行的所有行(SQL DB)
Eloquent: Get all rows where column value(x) exists in more than one row (SQL DB)
我想在 Laravel 的 Eloquent 中执行以下原始 SQL 查询:
SELECT distinct user_id FROM order_payment WHERE user_id IN (SELECT user_id FROM order_payment where payment_status = 'paid' GROUP BY user_id HAVING COUNT(*) > 1);
这里我使用 where in
和 属性 user_id
这样同一 table(order_payment
) 中的所有行都具有 payment_status=paid
并按 属性 user_id
分组 count > 1
进行 select 编辑,最后我们从给定的一组用户 ID 中 select distinct user_ids
。
此查询的总体 objective 是获取所需列值 (user_id's in this case
) > 1...
的所有行
例如:
we have 3 rows > A, B, C
row A has user_id = 1;
row B has user_id = 1;
row C has user_id = 2;
result should have [user_id: 1] as the count becomes greater than 1
上面的原始查询对我有用,但现在我正在写 api,我想知道如何在 Eloquent 中复制它。
请帮忙!
因此可以使用 groupBy
和 havingRaw
方法
完成此查询的 eloquent 方式
我们首先 select 我们需要聚合的列
OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
然后我们对我们需要的数组进行分组 - groupBy('user_id')
,请注意,我们分组的 属性 必须在 select 语句中,否则这将不起作用。
现在我们查看是否有多个行具有相同 user_id
的最后一个子句,我们使用 > havingRaw('COUNT(user_id) > ?', [1])
现在整个 eloquent 查询如下所示
OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
->groupBy('user_id')
->havingRaw('COUNT(user_id) > ?', [1])
->get();
请注意,在 select 子句中,我们将 DB 原始语句作为字符串传递给查询构建器,因此应该小心 SQL 注入。
我想在 Laravel 的 Eloquent 中执行以下原始 SQL 查询:
SELECT distinct user_id FROM order_payment WHERE user_id IN (SELECT user_id FROM order_payment where payment_status = 'paid' GROUP BY user_id HAVING COUNT(*) > 1);
这里我使用 where in
和 属性 user_id
这样同一 table(order_payment
) 中的所有行都具有 payment_status=paid
并按 属性 user_id
分组 count > 1
进行 select 编辑,最后我们从给定的一组用户 ID 中 select distinct user_ids
。
此查询的总体 objective 是获取所需列值 (user_id's in this case
) > 1...
例如:
we have 3 rows > A, B, C
row A has user_id = 1;
row B has user_id = 1;
row C has user_id = 2;
result should have [user_id: 1] as the count becomes greater than 1
上面的原始查询对我有用,但现在我正在写 api,我想知道如何在 Eloquent 中复制它。
请帮忙!
因此可以使用 groupBy
和 havingRaw
方法
我们首先 select 我们需要聚合的列
OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
然后我们对我们需要的数组进行分组 - groupBy('user_id')
,请注意,我们分组的 属性 必须在 select 语句中,否则这将不起作用。
现在我们查看是否有多个行具有相同 user_id
的最后一个子句,我们使用 > havingRaw('COUNT(user_id) > ?', [1])
现在整个 eloquent 查询如下所示
OrderPayment::select('user_id', \DB::raw('COUNT(user_id) as payment_made))
->groupBy('user_id')
->havingRaw('COUNT(user_id) > ?', [1])
->get();
请注意,在 select 子句中,我们将 DB 原始语句作为字符串传递给查询构建器,因此应该小心 SQL 注入。