Laravel hasManyThrough操纵user_id

时间:2018-04-15 10:26:35

标签: php mysql laravel has-many-through

我在Laravel中遇到了hasManyThrough函数的问题。

我的目标是获取用户所关注的用户所显示的帖子。我试图通过以下方式实现这一目标:

  1. 在User.php中,获取已登录用户的ID
  2. 将用户的ID与Follow.php
  3. 中名为user_id的列相匹配
  4. 从Follow.php
  5. 中的行中获取target_id
  6. 获取user_id与Follow.php
  7. 中的target_ids匹配的帖子

    我正确地检索用户关注的数据。但是,在数据中返回的user_id是登录用户而不是帖子的作者。为什么呢?

    user.php的

    public function feed() {
    return $this->hasManyThrough(
           'App\Post',
           'App\Follow',
           'user_id',
           'user_id',
           'id',
           'target_id'
    )
    ->with('user')
    ->orderBy('id', 'DESC');
    }
    

    post.php中

    public function user() {
        return $this->belongsTo('App\User');
    }
    

    通过

    从控制器调用
    $posts = Auth::user()->feed;
    

1 个答案:

答案 0 :(得分:1)

您的代码会创建此查询:select `posts`.*, `follows`.`user_id`...

正如您所看到的,posts.user_idfollows.user_id覆盖(follows.user_id是急切加载所必需的。)

我为您的问题找到了两种可能的解决方案:

  1. 重命名follows.user_id
  2. 使用两个单独的关系:UserHasManyFollowHasManyPost