请问如何查询每个分类下的前 N 条记录?

class ArticleCategory extends Model
{
    public function articles()
    {
        return $this->hasMany('App\Models\Article', 'category_id', 'id');
    }
}

$category->with([
                'articles' => function ($query) {
                    $query->limit(6);
                }])->get();

SQL: select * from `articles` where `articles`.`category_id` in ('1', '2', '3', '4', ......)  limit 6

请问该怎样查询?

我是这样解决的

ArticleCategory::whereIn('id', [1, 2, 3])->with(['articles' => function ($query) {
    $table = $query->getRelated()->getTable(); //获取当前依赖表名称
    $query->whereRaw('( SELECT COUNT(*) FROM `' . $table . '` AS `temp` WHERE `' . $table . '`.`category_id` = `temp`.`category_id` AND `' . $table . '`.`id` > `temp`.`id`) <= 10'); //10获取10条记录 (table.id > temp.id) >号ID从小到大,<号获取最新的
}])->get();
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

据我所知,mysql族的数据库不直接支持分组topN查询。postgresql 这个是支持分组topN查询,个人感觉这个数据库现在开发的很全面, 抽空学习学习。分组topN问题可以在程序级别实现

5年前 评论

@luke05 直接使用 Eloquent ORM 有实现的办法吗?

5年前 评论

数据量小的话使用, collection 的 groupBy某个字段就可以自动归类, eloquent 也可以使用collection的方法, 可以单独写一个方法,遍历分类,截取前n就可以

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!