Laravel雄辩,当前状态等于字符串

时间:2016-10-05 11:22:28

标签: mysql laravel eloquent

我有一个候选人和一个状态表,每个候选人都有多种状态。当状态更改时,将创建状态表中的新行以存储新状态。因此,当用户想要按状态过滤候选者时,我想选择他们当前状态是用户选择的候选者,而不是所有之前的状态。 我的疑问是:

 $status = $request->get('status');

        $q->where(function ($q) use ($status) {
            $q->orWhereHas('statuses', function ($q) use ($status) {
                $q->where('status', 'like', "%" . $status . "%");
            });
        });

2 个答案:

答案 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。