Laravel QueryBuilder - 为每个外键选择N行

时间:2017-01-27 19:03:08

标签: laravel laravel-5 laravel-5.4

我试图为表中的每个外键检索最新的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();

等等。我如何将其作为所有外键的单个查询?

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以这样做:

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

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

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

答案 1 :(得分:0)

Per this:

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

它本身不受支持。相反,你必须使用懒惰的急切加载。