Eloquent有很多来自同一张桌子

时间:2014-07-03 11:38:51

标签: php laravel laravel-4 eloquent relationship

我有一些像这样的表:

usersfollowers_pivotactivities

在我的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的地方,我对它不太满意。这种多态方法更好吗?如果是这样,怎么样?

提前致谢,

0 个答案:

没有答案