【问题标题】:SImple Pagination is not working in Laravel简单分页在 Laravel 中不起作用
【发布时间】:2022-03-31 13:27:10
【问题描述】:

我想为我的数据实现简单的分页方法,但它不起作用,我不知道我做错了什么。

public function showFavorites()
{

    $myId = Auth::user()->id;

    $usersfavorite = collect(new User);
    $favoritedId    = Favoriteuser::where('favoritedbyid', Auth::user()->id)->latest()->lists('favoritedid')->toArray();

    if(count($favoritedId) > 0){
        $ids_ordered = implode(',', $favoritedId);

        $usersfavorite = User::with('usercity','profile')->whereIn('users.id', $favoritedId)
            ->leftJoin('deactivateaccount', 'users.id', '=', 'deactivateaccount.user_id')
            ->where('deactivateaccount.user_id', null)
            ->where('users.is_possible_scammer', 0)
            ->where('users.issuspended', 0)
            ->where('users.isusernameapproved', 1)
            // ->where('hasapprovedaboutme', 1)
            // ->where('hasapprovedlookingfor', 1)
            // ->where('hasapprovedtagline', 1)
            ->where(function($sub_query)
            {
                $sub_query->where('users.flag', 1)
                    ->orWhereIn('users.membershiptype', ['admin', 'premium', 'free-premium', 'diamond']);
            })
            ->whereNotIn('users.id', function($query) use ($myId)
            {
                $query->select('blockedid')
                        ->from(with(new Blockeduser)->getTable())
                        ->where('blockedbyid', $myId);
            })
            ->whereNotIn('users.id', function($query) use ($myId)
            {
                $query->select('blockedbyid')
                        ->from(with(new Blockeduser)->getTable())
                        ->where('blockedid', $myId);
            })
            ->orderByRaw(DB::raw("FIELD(users.id, $ids_ordered)"))
            // ->take(self::INTEREST_RESULT_LIMIT_COUNT)
            ->select('*','users.id as id')
            ->simplePaginate(30);

            $livestream_metadata = $usersfavorite->map(function ($user)
            {
                $user['livestream_metadata'] = findLiveStreamingMetadata($user);

                return $user;
            });
    }
    dd($usersfavorite->previousPageUrl());
    $favorited = new Favoriteuser();

    return view('interests.favorites')
        ->with(['users' => $usersfavorite, 'favorited' => $favorited]);
}

当我 dd($usersfavorite->previousPageUrl());它有错误说previousPageUrl方法不存在

【问题讨论】:

    标签: laravel pagination


    【解决方案1】:

    运行

    dd(get_class($usersfavorite));
    

    你会上哪门课? previousPageUrl 方法仅包含在 Paginator 类中。

    如果条件count($favoritedId) > 0 为假,则$usersfavorite 变量将是\Illuminate\Support\Collection 类的实例。

    \Illuminate\Support\Collection 类没有 previousPageUrl 方法。见Laravel API

    【讨论】:

      【解决方案2】:

      当您在$usersfavorite 上调用map 时,它会返回一个不包含previousPageUrl 方法的集合。 你想要的是在map 之前使用tap 辅助方法。这将返回您在 mapped 之前拥有的 Paginator 对象。

      ...
      $livestream_metadata = tap($usersfavorite)->map(function ($user) {
              $user['livestream_metadata'] = findLiveStreamingMetadata($user);
      
              return $user;
          });
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 2014-08-15
        • 2016-11-28
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多