我有一个候选人和一个状态表,每个候选人都有多种状态。当状态更改时,将创建状态表中的新行以存储新状态。因此,当用户想要按状态过滤候选者时,我想选择他们当前状态是用户选择的候选者,而不是所有之前的状态。 我的疑问是:
$status = $request->get('status');
$q->where(function ($q) use ($status) {
$q->orWhereHas('statuses', function ($q) use ($status) {
$q->where('status', 'like', "%" . $status . "%");
});
});
答案 0 :(得分:0)
我将查询更改为打击并且工作正常。
$q->whereRaw('status LIKE "%'.$status.'%" AND id=(select max(id) from statuses WHERE status LIKE "%'.$status.'%")');
修改强>
上面的查询有一个问题,那就是它只是得到第一个匹配的候选者而不是全部,所以我把查询改为:
$q->where(function ($q) use ($status) {
$q->orWhereHas('statuses', function ($q) use ($status) {
$q->whereRaw('status LIKE ? AND id IN (SELECT MAX(id) FROM statuses GROUP BY candidate_id)',["%".$status."%"]);
});
});
答案 1 :(得分:-1)
我的能力是,候选人的现状是最后一次记录。 我说mysql方向,对于你的迁移和建模,实现这个。
select * from status
where id =(
select max(id) from status
where candidate_id= x
)
x是候选人ID。