如何制作Laravel 4分页

时间:2014-07-19 13:53:42

标签: php laravel laravel-4 pagination

大家好,我正在尝试在Laravel 4中进行分页,但我的代码不起作用。 控制器有动作:

public function getSingleProduct($prodName, $id)
    {               
        $singleProduct = Product::getOne($id);
        $getAllReviews = Review::getAllBelongsToProduct($id);
        $this->layout->content = View::make('products.single')
                                     ->with('reviews', $getAllReviews)
                                     ->with('products', $singleProduct);
    }

我想分页getAllReviews(每页5个)。我试过这样的: $getAllReviews = Review::getAllBelongsToProduct($id)->paginate(5);但它对我不起作用。这也是我的评论模型

public static function getAllBelongsToProduct($id) {
     return self::where('product_id', '=', $id)
                ->join('products', 'reviews.product_id', '=', 'products.id')                    
                ->select('reviews.*', 'products.photo')
                ->orderBy('created_at', 'desc')
                ->get();
}

我哪里有错?

1 个答案:

答案 0 :(得分:1)

而不是模型上的静态方法使用查询范围,这将是灵活的:

// Review model
public function scopeForProduct($query, $id)
{
    $query->where('product_id', $id);
}

public function scopeWithProductPhoto($query)
{
    $query->join('products', 'reviews.product_id', '=', 'products.id')                    
      ->select('reviews.*', 'products.photo');
}

然后使用它:

// get all
$reviews = Review::forProduct($id)->withProductPhoto()->latest()->get();

// get paginated
$reviews = Review::forProduct($id)->withProductPhoto()->latest()->paginate(5);

latestorderBy('created_at', 'desc')的内置方法。

如果您只想在控制器中进行一次调用,请将上述链接并将其包装在模型中的方法中。