📜  Laravel OrderBy on Eloquent whereHas 关系 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:12.871000             🧑  作者: Mango

Laravel OrderBy on Eloquent whereHas 关系 - PHP

在使用Laravel Eloquent ORM时,当我们需要对一个带有关系的查询结果进行排序时,可以使用orderBy()方法。但是,如果我们需要对关系表的数据进行排序时,我们就需要使用whereHas()方法来实现。

whereHas方法简介

whereHas()方法是Laravel Eloquent ORM中的一个功能强大的方法,可以用于查询具有相应关系的模型。它允许我们筛选出那些拥有与关联模型约束匹配的关联模型的父模型。

$query->whereHas('relation', function ($query) {
    $query->where('column', 'value');
});

在上面的例子中,我们可以看到whereHas()方法包含两个参数。第一个参数是字符串类型的关系名称,而第二个参数是一个闭包,它接受一个查询构建器实例,我们可以在其中定义我们想要的额外约束条件。

orderBy和whereHas的联合使用

使用whereHas()方法对关系表进行约束之后,我们就可以对结果进行排序了。下面是一个示例代码片段:

$query = User::with('posts')
    ->whereHas('posts', function ($query) {
        $query->where('published', true);
    })
    ->orderBy('posts.created_at', 'desc')
    ->paginate(10);

在上面的代码片段中,我们首先使用with()方法来预加载User模型的posts关系。然后,我们在whereHas()方法中使用闭包来筛选出已发布的博客文章。最后,我们使用orderBy()方法对关系表中的记录按照发布时间进行降序排列。

结论

在Laravel Eloquent ORM中,使用whereHas()方法对关系表进行筛选,然后再使用orderBy()方法对结果进行排序是非常常见的操作。希望上述内容能够对你的开发工作有所帮助。