【问题标题】:Tweaking Eloquent relations – how to get N related models per parent?调整 Eloquent 关系——如何为每个父节点获取 N 个相关模型?
【发布时间】:2016-09-30 13:35:44
【问题描述】:

如何获取每个帖子的 2 个最新的 cmets? 我使用 laravel 5.2 和 Postgres

我的 cmets 表

+-----+---------------------+---------+
| id  | created_at          | post_id |
+-----+---------------------+---------+
| 344 | 2014-08-17 21:25:46 |       1 |
| 320 | 2014-08-17 21:25:45 |       1 |
|   4 | 2014-08-17 21:25:26 |       1 |
|  72 | 2014-08-17 21:25:29 |       1 |
| 158 | 2014-08-17 21:25:37 |       2 |
| 423 | 2014-08-17 21:25:50 |       2 |
|  59 | 2014-08-17 21:25:29 |       2 |
| 227 | 2014-08-17 21:25:40 |       2 |
| 308 | 2014-08-17 21:25:45 |       3 |
|  34 | 2014-08-17 21:25:28 |       3 |
+-----+---------------------+---------+

我的帖子表

+-----+---------------------+---------+
| id  | created_at          | title   |
+-----+---------------------+---------+
| 1   | 2014-08-17 21:25:46 |       a |
| 2   | 2014-08-17 21:25:45 |       b |
| 3   | 2014-08-17 21:25:26 |       c |
+-----+---------------------+---------+

我想获取最新 2 cmets 的所有帖子。我怎么能用 Eloquent 做到这一点。 提前致谢!

【问题讨论】:

    标签: php laravel laravel-5 eloquent laravel-5.2


    【解决方案1】:

    您需要在您的 Post 模型中定义额外的关系,它将返回 2 个最新的 cmets

    class Post extends Model {
      public function latest_comments() {
        return $this->hasMany(Comment::class)->take(2)->orderBy('created_at', 'desc');
      }
    }
    

    现在,对于每个帖子,您都可以使用 $post->latest_cmets 访问其 2 个最新的 cmets;

    【讨论】:

    • 此代码将仅显示所有帖子的 2 个最新 cmets,但我希望每个帖子有 2 个最新 cmets。你有什么想法吗?
    • 使用此代码,每个帖子将包含其 2 个最新的 cmets,而不是所有帖子的 2 个最新 cmets
    • 我使用 Post::with('latest_comments')->get() 然后我只得到 2 个最新的 cmets 和 3 个帖子
    • 每个帖子的cmets都一样吗?
    • 不,先生!一条评论只属于一个帖子。只有第一个帖子有 2 个 cmets,其他帖子没有
    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多