這裡有一個場景,查詢一段時間內,使用者消費記錄的排名情況
我們假設有一個 users 表和一個 orders 表
// Order.php
class Order extends Model
{
}
// User.php
class User extends Model
{
public function orders()
{
$this->hasMany(Order::class)
}
}
根據 laravel 文件說明,我們可以使用 whereHas
很方便的統計訂單數大於 5 的使用者
$users = User::has('orders', '>', 5);
// 或者統計已支付的訂單數
$users = User::whereHas('orders', function($query){
$query->where('pay_status', 1);
}, '>', 5);
要實現我們開頭說的排名功能,我們需要分兩步
use Illuminate\Support\Facades\DB;
// 首先我們計算該使用者的總消費金額
$user_total_money = Order::where('user_id', 123)->sum('paied_money');
// 然後計算高於該使用者消費金額的使用者
$users_exceed_count = User::whereHas('orders', function($query){
$query->select(DB::raw('sum(paied_money)'));
$query->where('pay_status', 1);
}, '>', $user_total_money)
->count();
$users_exceed_count
加 1 就是該使用者的消費金額的排名了
本作品採用《CC 協議》,轉載必須註明作者和本文連結