根据偏移和限制从Laravel Collection获取部分信息

时间:2015-03-11 10:18:07

标签: laravel eloquent laravel-5

我从Laravel Collection获取特定部分数据时遇到问题。在我的应用程序中,我在用户和主题之间有以下关系:

User.php模型

public function topics() {
        return $this->belongsToMany('Topic', 'stdr_user_topics', 'user_id', 'topic_id')->withTimestamps();
    }

Topic.php模型

public function users() {
        return $this->belongsToMany('User', 'stdr_user_topics','topic_id', 'user_id')->withTimestamps();
    }

根据我的兴趣,我正在尝试获取属于经过身份验证的用户的特定主题部分:

if (Auth::check()) {
    // Get topics for authenticated user
    $userTopics = Auth::user()->topics;
    if (count($userTopics)) {
        $result = $userTopics
                    ->where('name', '!=', '')
                     ->sortByDesc('followers')
                     ->skip($offset)
                     ->take($limit);
    } else {
        $result = false;
    }
}

上述代码应根据$offset$limit获取有关用户主题的部分信息。然而,当跑步时,它会抛出这个:

  

调用未定义的方法   照亮\数据库\锋\收藏::跳过()

实现上述收藏所需的正确方法是什么?我正在使用Laravel 5。

2 个答案:

答案 0 :(得分:2)

为什么不在上面的if声明中移动您正在使用的这些条款,如:

$userTopics = Auth::user()->topics()->where('name', '!=', '')
                 ->sortByDesc('followers')
                 ->skip($offset)
                 ->take($limit)
                 ->get();
if ($userTopics->count()){
    $result = $userTopics;   
} else {
    $result = false;
}

答案 1 :(得分:1)

为什么不使用Constraining Eager Loads?

也许你可以做类似

的事情
Auth::user()->with(['topics' => function($query) use ($limit, $offset) {

    $query->where('name', '!=', '');
    $query->sortByDesc('followers');
    $query->skip($offset);
    $query->take($limit);
}])

请在此处阅读以获取更多信息:http://laravel.com/docs/5.1/eloquent-relationships#querying-relations

祝你好运!