我在laravel中遇到了hasmanythrough函数的问题。
我的目标是获得一个feed,其中日志由登录用户跟随的用户显示。我试图通过以下方式实现这一目标:
在user.php中,获取登录用户的id
将用户id与follow.php中名为user\ id的列匹配
从follow.php中的行获取目标\u id
从follow.php获取用户标识与目标标识匹配的帖子
我通过用户跟踪的人正确地检索数据。但是,在数据中返回的用户id是登录的用户,而不是文章的作者。为什么?
用户.php
public function feed() {
return $this->hasManyThrough(
'App\Post',
'App\Follow',
'user_id',
'user_id',
'id',
'target_id'
)
->with('user')
->orderBy('id', 'DESC');
}
邮政.php
public function user() {
return $this->belongsTo('App\User');
}
从控制器通过调用
$posts = Auth::user()->feed;
1条答案
按热度按时间ix0qys7i1#
您的代码将创建此查询:
select
posts.*,
follows.
user_id...
如你所见,posts.user_id
被覆盖follows.user_id
(follows.user_id
是紧急装载所必需的)。我看到两种可能的解决方法:
重命名
follows.user_id
.使用两种不同的关系:
User
→HasMany
→Follow
→HasMany
→Post