Eloquent Raw Subquery Получить счетчик по пользователю - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть две модели: Users и VacationRequests. Пользователь может иметь много запросов на отпуск. В запросах на отпуск есть столбец «required_by», в котором содержится идентификатор пользователя, столбец date_requested и столбец «решение».

Я хочу получить количество ожидающих запросов на отпуск каждого пользователя. Приведенный ниже запрос хорошо показывает, сколько в таблице всего ожидающих запросов на отпуск, но я не могу понять, как запросить , сколько запросов на аутсандинг для каждого пользователя.

$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();

1 Ответ

1 голос
/ 05 ноября 2019
  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');
    }
}
Используйте Eloquent для построения запроса и агрегирования подсчета
use App\User;
...
$users = User::withCount(['vacation_requests as outstanding_requests' => function ($count) {
    $count->where('decision', 'pending');
}])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...