Laravel QueryBuilder - Select 每个外键对应 N 行

Laravel QueryBuilder - Select N rows for each foreign key

我正在尝试为 table 中的每个外键检索最新的 5 行,因此想象一下以下数据库结构:

CATEGORY (id, name)
ARTICLE (id, category_id, title)

我想做这样的事情:

Article::where("category_id", 1)
       -> latest()
       -> limit(5)
       -> get();

Article::where("category_id", 2)
       -> latest()
       -> limit(5)
       -> get();

等等。我如何将此作为对所有外键的单个查询来执行?

谢谢!

你可以这样做:

Category::with(['article' => function($q){
        $q->orderBy('id', 'desc');
        $q->limit(5);
    })->get();

当然,您需要在模型中创建外键关系才能使用该功能。

这里是如何创建关系的文档:https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

据此:

https://laracasts.com/discuss/channels/eloquent/extending-eloquents-builder-to-eager-load-collections-w-limits?page=2

它本身不受支持。相反,您必须使用延迟预加载。