php Laravel -使用where()行为链接的latest()

jdzmm42g  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(102)

因此,我有一个多对多表,其中包含created_at以及外键student_id和status_id。
对于每个学生,我只想检索最新的status_id = 1的条目。
我这样试过:(这是一个查询链,在本例中,$query将是Student::where(something else))

$query->whereHas('statusuri', function($query) use ($statusuri) {
                $query->latest('status_student.created_at')->where('status_id', 1);
});

(statusuri是多对多关系)
但我得到的结果与我所需要的不同。
它首先执行where子句,然后执行latest()。基本上,它检索匹配where的最后一个条目。
我想搜索每个学生,最新的条目,如果where子句匹配它,就得到那个条目。如果不匹配,就不返回任何东西。
Eloquent是否可以做到这一点?

  • 谢谢-谢谢
brccelvz

brccelvz1#

您是否考虑过“具有多个之一”的关系:https://laravel.com/docs/9.x/eloquent-relationships#advanced-has-one-of-many-relationships
您可以在Student模型中建立关系:

public function latestStatus()
{
    return $this->hasOne(StatusStudent::class)->ofMany([
        'created_at' => 'max',
        'id' => 'max',
    ], function ($query) {
        $query->where('status_id', 1);
    });
}

相关问题