雄辩的原始子查询获得用户计数

问题描述 投票:0回答:1

我有两个模型:Users和VacationRequests。用户可以有许多休假请求。休假请求具有一个“ requested_by”列,其中包含用户的ID,一个date_requested列和一个“ decision”列。

我想统计每个用户的待处理假期请求。下面的查询可以很好地查看表中有多少未决休假请求,但是我还不太清楚如何查询每个用户有多少出境请求。

$users = DB::table('users')
        ->leftJoin('vacation_requests', 'users.id', '=', 'vacation_requests.requested_by')
        ->select('users.*', DB::raw('(SELECT COUNT(vacation_requests.date_requested) FROM vacation_requests WHERE decision = "pending") AS outstanding_requests'))
        ->groupBy('id')
        ->get();
mysql eloquent
1个回答
0
投票
  1. 制作模型并在它们之间添加关系
# app/User.php
<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $table = 'users';

    public function vacation_requests()
    {
        return $this->hasMany(VacationRequest::class, 'requested_by');
    }
}
# app/VacationRequest.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class VacationRequest extends Model
{
    protected $table = 'vacation_requests';

    public function user()
    {
        return $this->belongsTo(User::class, 'requested_by');
    }
}
  1. 使用Eloquent构建查询并汇总计数
use App\User;
...
$users = User::withCount(['vacation_requests as outstanding_requests' => function ($count) {
    $count->where('decision', 'pending');
}])->get();
© www.soinside.com 2019 - 2024. All rights reserved.