我有一些像这样的表:
users
,followers_pivot
,activities
在我的User
模型中,所有关系都已设置且工作正常。
我的User.php模型中的一些方法:
class User extends Eloquent {
//The ones I follow
public function imFollowing() {
return $this->belongsToMany('User', 'followers_pivot', 'follower_id', 'followee_id');
}
//The people who's following me
public function followers() {
return $this->belongsToMany('User', 'followers_pivot', 'followee_id', 'follower_id');
}
//shows all activities of the user
public function activities() {
return $this->hasMany('Activity', 'userID');
}
}
我想获取我正在关注的每个人的活动。
我可以这样取道:
User::with('imFollowing.activities')->find(11);
但是,这还不够。它们位于imFollowing
集合下,由每个用户分隔。
我想直接获取活动,而不是在imFollowing
s。
我想到了Has-Many-Through关系,但我不能把它放在一起。
这是我尝试使用hasManyThrough
:
//User.php Model
public function activityFeed() {
return $this->hasManyThrough('Activity', 'User', 'id', 'userID');
}
和
//in a route
return User::with('activityFeed')->find(11);
但是这会返回集合null
。
编辑:我可以使用Fluent方式执行此操作:
Activity::join('users', 'activities.userID', '=', 'users.id', 'inner')
->join('followers_pivot', 'followers_pivot.followee_id', '=', 'users.id', 'inner')
->where('followers_pivot.follower_id', 11)
->orderBy('activities.id', 'desc')
->select('activities.*')
->get();
如何使用Eloquent实现这一目标?这将只是我将使用Fluent的地方,我对它不太满意。这种多态方法更好吗?如果是这样,怎么样?
提前致谢,