在我的 Laravel 应用程序中,我有一个类别列表页面。当用户单击某个子类别时,我想列出所有产品并对该结果使用分页。目前,我已经借助子类别 ID 列出了与该子类别相关的所有产品:
public function subcategoryListing($slug){
$products = Subcategory::find($idofSubcat)->products;
return view('pages.subcategorylisting')
->with(array(
'products' => $products,
));
}
此结构涉及三个类:类别、子类别和产品。它们的声明如下:
类别
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use App\Subcategory;
class Category extends Model
{
protected $table = 'category';
public $timestamps = false;
public function subCategory(){
return $this->hasMany('App\Subcategory', 'category_id');
}
}
子类别
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Subcategory extends Model
{
protected $table = 'subcategory';
public $timestamps = false;
public function products(){
return $this->hasMany('App\Products');
}
}
产品
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Products extends Model
{
protected $table = 'products';
}
对于每个模型类,我都有一个表,其结构如下:
Category
- id
- category_name
SubCategory
- id
- category_id
- subcategory_name
Products
- id
- subcategory_id
- product_title
- description
- price
我想要的是对我的页面中的查询检索到的结果进行分页。有没有更好的方法来获取与子类别
关联的产品
并对它们进行分页?
最佳答案
在 Eloquent(Laravel 的 ORM)中,当您将关系作为属性调用时($subCategory->products
),它会根据关系类型返回相关对象或对象集合(属于, 有很多, ...)。相反,如果您将其作为函数调用 ($subCategory->products()
),您将获得一个 QueryBuilder
实例。
引用http://laravel.com/docs/5.1/eloquent-relationships#querying-relations ,在关系方法与方法部分下。动态属性了解更多详细信息。
无论如何,使用关系方法,您可以为您的集合调用paginate()
。然后,考虑到这一点,您可以稍微更改代码以获得您想要的:
public function subcategoryListing($slug) {
// I'm supposing here that in somewhere before
// run the query, you set the value to $idofSubcat
// variable
$products = Subcategory::find($idofSubcat)->products()->paginate();
return view('pages.subcategorylisting')
->with(array(
'products' => $products,
));
}
关于php - 从 hasMany 关系中获取所有对象并分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492966/