Laravel:如何获取在何条件下的记录组中的最新记录?

时间:2019-10-01 20:56:42

标签: laravel relationship

我有两个表,分别命名为studentscitiesstudents表具有一个与cities表相关的主键。

学生表: Students table

在前端,我希望满足以下要求的cities表数据:

  1. students表中的数据必须按city_id分组
  2. 如果city_id表中有多个记录具有相同的students,则仅选择组中的最新记录。
  3. 搜索最新记录,并仅选择不活跃的学生。

这是city模型的关系函数:

public function student()
{
    return $this->hasOne(Student::class, 'city_id', 'id')->orderByDesc('id');
}

这是我的控制器功能:

$data = City::whereHas('student', function($query){
              $query->where('is_active', 0)
        })->with('student')->get();

预期结果::考虑到样本数据,查询必须不返回任何内容。

当前结果:由于第二行中有不活动的学生记录,因此它返回第三行。因此,在这种情况下,where条件无法正常工作。

我可以通过以下SQL查询获得预期结果:

select *
  from students s
 where id = (select max(t2.id)
               from students s2
              where s.city_id = s2.city_id) AND is_active = '0';

如何解决此逻辑错误?

1 个答案:

答案 0 :(得分:0)

这样的事情怎么办?

public function inactiveStudent()
{
    return $this->hasOne(Student::class, 'city_id', 'id')
                ->where('is_active', 0)
                ->orderByDesc('id');
}
$data = City::whereHas('inactive_student')
            ->with('inactive_student')
            ->get();

查询时不确定是inactive_student还是inactiveStudent