【发布时间】:2020-11-22 16:40:28
【问题描述】:
所以我有三个模型:志愿者、任务和付款。一个志愿者可以有很多(有很多关系)任务,一个任务可以有很多(另一个有很多关系)付款。
class Volunteer
public function tasks()
{
return $this->hasMany(Task::class);
}
class Task
public function volunteer()
{
return $this->belongsTo(Volunteer::class);
}
public function payments()
{
return $this->hasMany(Payment::class);
}
class Payment
public function task() {
return $this->belongsTo(Task::class);
}
现在我想查询所有有无偿/部分有偿任务的志愿者。所以,基本上我想过滤志愿者的任务,其中每个任务的金额应该等于与该特定任务相关的所有付款的总和。
我尝试使用 whereHas 和 with,但似乎无法正确过滤任务。
我已经设法使用连接来做到这一点,但想知道是否可以使用 whereHas 或 with。下面是代码:
Volunteer::select('volunteers.id', 'volunteers.name', 'tasks.amount', DB::raw('SUM(payments.amount) as amount_paid'))
->join('tasks', 'tasks.volunteer_id', '=', 'volunteers.id')
->leftJoin('payments', 'payments.task_id', '=', 'tasks.id')
->groupBy('volunteers.id', 'volunteers.name', 'tasks.amount')
->havingRaw('amount_paid >= tasks.amount')
->get();
任何帮助将不胜感激!
【问题讨论】:
标签: php laravel eloquent eloquent-relationship