我正在尝试在Laravel 5.5
上构建一个小应用程序,我的模型名为Milestone
和Task
。 Task
有一个名为status
的列,status
是enum
属性列,表格中包含['open', 'closed', 'accepted', 'sent']
,我想要获取所有task
参与特定Milestone
,其中包含status:
- accepted
和sent
的任务,以下是我的模型:
任务
public function milestone()
{
return $this->belongsTo('App\Models\Team\Milestone', 'milestone_id');
}
在我的控制器中,我正在尝试这样的事情:
$completedTask = Task::whereHas('milestone', function ($q) use($id) {
$q->where('unique_id', $id)->orWhere('status', ['Sent', 'Accepted']);
})->count();
此orWhere
子句还提供其他里程碑表数据。
帮助我解决这个问题。感谢。
答案 0 :(得分:1)
要获得unique_id
等于某个$id
并且可以接受或发送相关任务状态的里程碑,您可以将此数据设为
$milestones= Milestone::with(['tasks' => function ($query) {
$query->whereIn('status', ['sent', 'accepted']);
}])
->where('unique_id', $id)
->get();
或者获取任务
$tasks = Task::with(['milestone' => function ($query) use($id) {
$query->where('unique_id', $id);
}])
->whereIn('status', ['sent', 'accepted'])
->get();
答案 1 :(得分:1)
我认为你的代码应该是这样的,以获得具有unique_id == $ id和(status =已发送或状态==已接受)的任务
$completedTask = Task::whereHas('milestone', function ($q) use($id) {
$q->where('unique_id', $id)->where(function ($query) {
$query->where('status', 'Sent')
->orWhere('status', 'Accepted');
})
})->count();
答案 2 :(得分:0)
我想获取所有具有状态任务的里程碑: - 已接受并已发送。任务有一个名为status
的列
您应该使用orWhereIn()
:
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)->orWhereIn('status', ['Sent', 'Accepted']);
})
->get();
您希望获得里程碑,并在status
模型中说Task
。这就是您需要使用Milestone
模型和tasks
关系的原因。此外,如果您想要获取里程碑而不计算里程碑,请使用get()
代替count()
答案 3 :(得分:0)
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)
->whereIn('status', ['Sent', 'Accepted']);
})->get();
或者