Larevel / MySQL仅在附加条件下获取最新记录

rseugnpd  于 2023-05-16  发布在  Mysql
关注(0)|答案(2)|浏览(131)

我有一个hasOne的关系。下图显示了具有相同“contract_id”的关系记录
需要以下结果:
我想只选择最高版本=> 5的最后一条记录,但前提是“状态”列不是“草稿”。否则,如果关系不满足条件,则根本不选择父记录。($contract::with('latestVersion ')->paginate())
我不想得到满足条件的下一个可能的记录-意思是:
我不想获得“状态活动”的“版本3”
enter image description here
我尝试按latest()或groupBy('version')排序...

tzxcd3kk

tzxcd3kk1#

->where('status', '!=', 'draft')添加到您的条件
更多关于主题:https://laravel.com/docs/10.x/queries#where-clauses

nzk0hqpo

nzk0hqpo2#

也许你可以使用whereHaswithWhereHas,在has查询中添加额外的where条件。

$contract::whereHas('latestVersion', function ($query) {
    $query->where('version', '=', 5)->where('status', '!=', 'draft');
})->paginate();

参考:https://laravel.com/docs/10.x/eloquent-relationships#querying-relationship-existence
希望这会有帮助

相关问题