php - 从 hasMany 关系中获取所有对象并分页

标签 php pagination laravel-5 relationship

在我的 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/

相关文章:

php - 从 mysql php 制作多级数组

php - 推特 API 推文

PHP 分页 - 在附加页面上显示正确内容的问题

php - 如何将上传的图片保存到 laravel 中的存储?

php - 如何在 slim 3 中使用缓存系统(memcached、redis 或任何其他)

django - 在 get_queryset 中过滤时重置 MultipleObjectMixin 分页

ios - 无限滚动和重复数据

php - Laravel 问题凭证与我们的记录不匹配

php - Laravel 页面加载问题 连接已重置

php - 我想在后台运行 php 脚本