大家好,我正在尝试在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();
}
我哪里有错?
答案 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);
latest
是orderBy('created_at', 'desc')
的内置方法。
如果您只想在控制器中进行一次调用,请将上述链接并将其包装在模型中的方法中。