Laravel:分页收集问题

时间:2018-05-09 09:17:44

标签: php database laravel

这是我的代码:

模特:

public static function myWishlist(){
    $id = Auth::id();
    $book_id = Wishlist::where('user_id', $id)->pluck('book_id');
    return DB::table('books')->whereIn('id', $book_id)->get();

控制器:

public function index(Request $request)
{$books = Wishlist::myWishlist()->paginate(20);
return view('wishlistCRUD.index', compact('books'))
       ->with('i', ($request->input('page', 1) - 1) * 5);

但它没有向我展示所有指定的书籍,而是说:

  

方法paginate不存在。

我也在模型中试过这个:

$book_id = Wishlist::where('user_id', $id)->pluck('book_id');
    return Book::whereIn('id',$book_id)->get();

但是它返回了一个集合,我不知道如何在我的视图中显示它。

2 个答案:

答案 0 :(得分:0)

获得结果后无法使用paginate。

你可以这样做:

public static function myWishlist() {
    $id = Auth::id();
    $book_id = Wishlist::where('user_id', $id)->pluck('book_id');
    return Book::whereIn('id', $book_id);
}

public function index(Request $request) {
    $books = Wishlist::myWishlist()->paginate(20);
    return view('wishlistCRUD.index', compact('books'))
       ->with('i', ($request->input('page', 1) - 1) * 5);
}

答案 1 :(得分:0)

首先,您无需使用static function eloquent already does that

第二,你可以像这样使用local scopes

型号:

public function scopeUserWishlist($query, $userID)
{
    // Although a join would be nicer !
    $book_ids = Wishlist::where('user_id', $userID)
                         ->pluck('book_id');
    return $query->whereIn('id', $book_ids);
}

控制器:

public function index(Request $request)
{
    $books = Wishlist::userWishlist(Auth::id())
                     ->paginate(20);
    return view('wishlistCRUD.index')
       ->with('books', $books)
       ->with('i', ($request->input('page', 1) - 1) * 5);
}