[英]Selecting from SQL database where row exists with user id then get all other rows with similar value
[英]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
一起使用where in
以便選擇同一表( order_payment
)中具有payment_status=paid
並按count > 1
的屬性user_id
分組的所有行,然后最后我們從給定的用戶 ID 集中選擇distinct user_ids
。
此查詢的總體目標是獲取所需列值( 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
方法來完成
我們首先選擇我們需要聚合的列
OrderPayment::select('user_id', \\DB::raw('COUNT(user_id) as payment_made))
然后我們 groupBy 我們需要的 arribute - 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 注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.