请问如何查询每个分类下的前 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();
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

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

6年前 评论

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

6年前 评论

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

6年前 评论

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