获取关注者 laravel 的帖子

Posted

技术标签:

【中文标题】获取关注者 laravel 的帖子【英文标题】:Get posts by followers laravel 【发布时间】:2015-04-23 13:30:04 【问题描述】:

我想为经过身份验证的用户显示一个提要页面,该页面显示他们关注的用户的最新帖子。我已经设置了一个跟随系统,其中包含以下内容:

标签:

帖子 用户 关注

用户模型:

 public function follow()   
    return $this->BelongsToMany( 'User', 'Follow' ,'follow_user', 'user_id');

饲料控制器:

public function feed () 

    $user = (Auth::user());

        return View::make('profile.feed')->with('user',$user);

    

Feed.blade

  @foreach ($user->follow as $follow)

 @foreach ($follow->posts as $post)

     //* post data here.

  @endforeach

 @endforeach

这是从用户关注的用户那里获取帖子,但是我有一个问题。 foreach 每次都返回一个用户,然后是他们的帖子。

它现在在做什么:

关注用户 1

发布 1 发布 2 发布 3 等

关注用户 2

发布 1 发布 2 发布 3 等

我想展示的内容:

已关注用户 1 条帖子 1 已关注用户 2 发布 1 已关注用户 2 发布 2 关注的用户 1 发布 2 等等等等

有什么想法吗?

【问题讨论】:

在您的模型上,您是如何建立关系的?看看hasManyThrough,它可能正是你所需要的。 【参考方案1】:
<?php
        /**
         * Get feed for the provided user
         * that means, only show the posts from the users that the current user follows.
         *
         * @param User $user                            The user that you're trying get the feed to
         * @return \Illuminate\Database\Query\Builder   The latest posts
         */
        public function getFeed(User $user) 
        
            $userIds = $user->following()->lists('user_id');
            $userIds[] = $user->id;
            return \Post::whereIn('user_id', $userIds)->latest()->get();
        

首先,您需要获取当前用户关注的用户及其ids,以便将其存储在$userIds中。

其次,您需要提要也包含您的帖子,因此您也将其添加到数组中。

第三,您返回该帖子的posterauthor 在我们从第一步获得的数组中的帖子。

然后将它们从最新到最旧的顺序存储起来。

欢迎提出任何问题!

【讨论】:

感谢您的回复!这似乎有效,但是我只是在视图中获取我的数据: ["id":118696,"category_id":"win","user":56031,"username": 等等。我该如何返回数据是否正确显示在我的视图中? 该函数应该在您的模型或存储库中。然后你从你的控制器调用那个函数,把它存储在某个变量中,然后通过你的View::make()函数传递它。 如果对您有帮助,请投票支持该答案。 ;) 感谢您迄今为止的帮助 :) 我很难从控制器调用该函数,您能帮忙吗? 什么都没有,因为我收到此错误:已达到“100”的最大函数嵌套级别,正在中止!【参考方案2】:

只是对 Akar 的回答的更正: 对于那些在 2020 年来到这里的人,您必须使用 pluck 而不是 lists。它在新版本的 laravel 中发生了变化。

public function getFeed(User $user) 
        
            $userIds = $user->following()->pluck('user_id');
            $userIds[] = $user->id;
            return \Post::whereIn('user_id', $userIds)->latest()->get();
        

【讨论】:

以上是关于获取关注者 laravel 的帖子的主要内容,如果未能解决你的问题,请参考以下文章

Laravel如何通过用户ID获取关注者数量?

Laravel 加入 3 个表

Laravel 5.3 - 用户收藏的单一通知(关注者)

Laravel/MailChimp:无法获取本地颁发者证书

Laravel API JSON 自定义和表关系

Laravel 追随者/追随者关系