【问题标题】:Laravel - Eloquent: get posts from user with users post tableLaravel - Eloquent:使用用户发布表从用户那里获取帖子
【发布时间】:2016-12-24 05:47:16
【问题描述】:

我搜索了很多,但没有找到任何答案,所以我希望你能帮助我!

我有三个表:posts、users 和 post_users。 post_users 包含两列:user_id 和 post_id。

我需要使用 Eloquent 获取用户的所有帖子。 有什么想法吗?

非常感谢!

(对不起,如果已经存在该问题,但我还没有找到它)

【问题讨论】:

  • 你已经建立关系了吗?
  • 设置 belongsTohasMany 这样的关系,你会发现它轻而易举
  • 不,我没有。我应该设置哪些关系和模型?谢谢!

标签: php laravel eloquent relation


【解决方案1】:

如果你没有建立关系,试试这个。然而,建立关系是首选。 PostUsers 和 Posts 是 post-users 和 posts 表的假设模型,并且 post 作为 posts 表的列。这给出了登录用户的帖子,但未经测试。

$postusers=PostUsers::where(['user_id'=>Auth::user()->id])->get();
foreach($postusers as $postuser)
{
        $posts=Posts::where(['post_id'=>$postuser->post_id)]->get();
        foreach($posts as $post)
         {
            print_r($post->post);
         }
}

【讨论】:

  • 谢谢,但我正在寻找关系方式
【解决方案2】:

Laravel 文档很好地涵盖了这一点,但我刚开始时也遇到了问题。查看Laravel Relationships 以获取完整信息。

// Inside your Post model
public function user() {
    return $this->belongsTo('App\User');
}

// Inside your User model
public function posts() {
    return $this->hasMany('App\Posts');
}

然后您可以创建查询:

$posts = User::find(1)->posts;

或者你可以进一步过滤它..

$posts = User::find(1)->posts()->where('active', 1)->get();

如果您的模型位置和名称不同,您可能需要更改 hasMany()belongsTo() 的路径。

【讨论】:

    【解决方案3】:

    如你所愿。 User 和 Post 之间的关系是多对多的

    - 定义关系

    // In User model
    public function posts(){
        return $this->belongsToMany(Post::class);
    }
    // In Post model
    public function users(){
        return $this->belongsToMany(User::class);
    }
    

    - 表结构

    - users
        id
    - posts
        id
    - post_user
        user_id
        post_id
    

    - 获取用户的所有帖子

    $posts = User::find($user_id)->posts
    

    【讨论】:

    • 我创建了 post_users 是因为很多用户都可以编辑帖子。因此,一个用户可以有很多帖子,而一个帖子可以有很多用户
    • 已编辑。注意命名约定
    【解决方案4】:

    试试这个

    来自控制器:

    dd(Auth::user()->posts);
    

    应用/用户

        public function posts()
        {
            return $this->belongsToMany('App\Entities\posts', 'post_users', 'user_id', 'post_id');
        }
    

    【讨论】:

      【解决方案5】:

      型号User

      public function posts()
      {
        return $this->belongsToMany('App\Post', 'post_users', 'user_id', 'post_id');
      }
      

      型号Post

      public function users()
      {
        return $this->belongsToMany('App\User', 'post_users', 'post_id', 'user_id');
      }
      

      试试:

      $user = User::find($id);
      $allpost = $user->posts()->get();
      var_dump($allpost);
      

      【讨论】:

      • 不客气。这是多对多关系,但在您的问题中,您应该使用一对多关系。
      【解决方案6】:

      在用户模型上与帖子模型建立关系:

      public function posts()
          {
              return $this->hasMany(Post::class);
          }
      

      在帖子模型上与用户模型建立关系:

       public function User()
          {
              return $this->belongsTo(User::class);
          }
      

      在控制器或您使用的任何地方:

        $userPosts = User::find($user->id)->posts->where('status', 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 2023-03-18
        • 2016-09-19
        • 1970-01-01
        相关资源
        最近更新 更多