【问题标题】:How to get latest n number of related model records in laravel如何在laravel中获取最新的n条相关模型记录
【发布时间】:2015-06-16 05:43:02
【问题描述】:

我有两张桌子 - CategoriesPosts。它们之间的关系是一对多的。即 - 一个类别有很多帖子。

我正在尝试获取所有 Categories 及其最新 3 个帖子

的列表

我试过这个:-

$with = array('posts' => function($query) {
  $query->take(3);
  $query->orderBy('created_at', 'desc');
  $query->addSelect(array('name', 'excerpt','category_id'));
});

$categories = Category::with($with)->get();

但它似乎只对第一个类别有效,后续类别为空。

【问题讨论】:

  • 尝试使用toSql() 而不是get() 转储查询
  • @Luceos 这很奇怪 - 查询只显示为 select * from categories
  • 当你$with = array('posts' => function($query) { $query->addSelect(array('name', 'excerpt','category_id'))->take(3)->orderBy('created_at', 'desc'); });时会发生什么
  • 我都试过了。它仍然无法正常工作。结果完全一样。
  • 当我删除 take(3) 约束时。正在为所有类别加载所有帖子。然而,在限制条件下,只有第一个类别有 3 个帖子,其余所有类别都显示 pin 属性,但它是空的。

标签: php laravel orm eloquent laravel-5


【解决方案1】:

你可以试试这样的:

$categories = Category::all()->each(function($category) {
    $category->posts = $category->posts()
                                ->addSelect(['name', 'excerpt', 'category_id'])
                                ->latest()->take(3)->get();
});

【讨论】:

  • 谢谢你的作品。他们有什么方法可以急切地加载这个吗?虽然我得到了我想要的结果,但它进行了 n+1 个查询。
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 2019-10-10
  • 2017-02-16
  • 2019-09-08
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多