如何在 Laravel 中的单列上使用带有两个条件的 orWhere
How to use orWhere with two conditions on single column in Laravel
我正在尝试在 Laravel 5.5
上构建一个小型应用程序,其中我有一个名为 Milestone
和 Task
的模型。 Task
有一个名为 status
的列,status
是 table 和 ['open', 'closed', 'accepted', 'sent']
中的 enum
属性列,我想获取所有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
子句还提供其他里程碑 table 数据。
帮我解决这个问题。谢谢。
I want to fetch all the Milestone which has task with status: - accepted and sent. Task is having a column named status
你应该使用 orWhereIn()
:
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)->orWhereIn('status', ['Sent', 'Accepted']);
})
->get();
您想获得里程碑,您在 Task
模型中说 status
。这就是为什么您需要使用 Milestone
模型和 tasks
关系。此外,如果您想获取里程碑而不计算里程碑,请使用 get()
而不是 count()
要获取 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();
我认为您的代码应该是这样的,以获取具有 unique_id == $id 和(status = Sent 或 status == Accepted)
的任务
$completedTask = Task::whereHas('milestone', function ($q) use($id) {
$q->where('unique_id', $id)->where(function ($query) {
$query->where('status', 'Sent')
->orWhere('status', 'Accepted');
})
})->count();
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)
->whereIn('status', ['Sent', 'Accepted']);
})->get();
orWhere & orWhereIn 会给你 OR 条件语句,
您应该在两个地方都使用 where 来获得 AND 条件...
我正在尝试在 Laravel 5.5
上构建一个小型应用程序,其中我有一个名为 Milestone
和 Task
的模型。 Task
有一个名为 status
的列,status
是 table 和 ['open', 'closed', 'accepted', 'sent']
中的 enum
属性列,我想获取所有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
子句还提供其他里程碑 table 数据。
帮我解决这个问题。谢谢。
I want to fetch all the Milestone which has task with status: - accepted and sent. Task is having a column named status
你应该使用 orWhereIn()
:
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)->orWhereIn('status', ['Sent', 'Accepted']);
})
->get();
您想获得里程碑,您在 Task
模型中说 status
。这就是为什么您需要使用 Milestone
模型和 tasks
关系。此外,如果您想获取里程碑而不计算里程碑,请使用 get()
而不是 count()
要获取 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();
我认为您的代码应该是这样的,以获取具有 unique_id == $id 和(status = Sent 或 status == Accepted)
的任务$completedTask = Task::whereHas('milestone', function ($q) use($id) {
$q->where('unique_id', $id)->where(function ($query) {
$query->where('status', 'Sent')
->orWhere('status', 'Accepted');
})
})->count();
Milestone::whereHas('tasks', function ($q) use($id) {
$q->where('unique_id', $id)
->whereIn('status', ['Sent', 'Accepted']);
})->get();
orWhere & orWhereIn 会给你 OR 条件语句, 您应该在两个地方都使用 where 来获得 AND 条件...