当前位置: 首页 > 知识库问答 >
问题:

基于关系获取集合中Laravel模型的列表和计数

叶晋
2023-03-14

我有两个Laravel雄辩的模型,ProductProductCategory,从产品到ProductCategory之间有一个名为Category()belongsTo()关系。

我已经让模型集合在显示刀片中的@foreach循环中迭代,但希望能够根据类别()关系获得产品数量的计数。。。

IE:在集合中20个模型的结果集中,可能有5个电机、5个齿轮箱和5个Acme小部件。我试图找到一种方法来输出作为结果一部分返回的类别列表,以及与每个返回类别相关的记录数。

产品模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model {
/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'products';


/**
 * The primary key associated with the table.
 *
 * @var string
 */
protected $primaryKey = 'id';


/**
 * Indicates if the IDs are auto-incrementing.
 *
 * @var bool
 */
public $incrementing = true;


/**
 * All related features for the current model.
 */
public function features() {
    return $this->hasMany('App\ProductFeature');
}


/**
 * Created By Relationship
 */
public function created_by() {
    return $this->belongsTo('App\User');
}


/**
 * Modified By Relationship.
 */
public function modified_by() {
    return $this->belongsTo('App\User');
}


/**
 * Category Relationship.
 */
public function category() {
    return $this->belongsTo('App\ProductCategory', 'category_id', 'id');
}





/**
 * Images Relationship.
 */
public function images() {
    return $this->HasMany('App\ProductImage', 'product_id', 'id');
}


/**
 * The relations to eager load on every query.
 *
 * @var array
 */
protected $with = ['features', 'created_by', 'modified_by', 'images'];
}

产品类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProductCategory extends Model {
/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'product_categories';


/**
 * The primary key associated with the table.
 *
 * @var string
 */
protected $primaryKey = 'id';


/**
 * Indicates if the IDs are auto-incrementing.
 *
 * @var bool
 */
public $incrementing = true;


/**
 * All related features for the current model.
 */
public function products() {
    return $this->hasMany('App\Product', 'category_id', 'id');
}


/**
 * Created By Relationship
 */
public function created_by() {
    return $this->belongsTo('App\User');
}


/**
 * Modified By Relationship.
 */
public function modified_by() {
    return $this->belongsTo('App\User');
}

}

控制器方法

public function showCategory($catAlias) {
    $products= Product::all();

    return view("website.store.results", ["products" => $products]);
}

期望输出示例

Category | Count
=================
Cat 1    |   4
Cat 2    |   1
Cat 5    |   5

共有1个答案

和和裕
2023-03-14

您可能希望返回类别而不是产品。您可以使用方法with Count急切地加载关系的计数:

public function someMethod()
{
    return view('someview', [
        'categories' => Category::withCount('products')->get(),
    ]);
}

@foreach ($categories as $category)
  <tr>
    <td>{{ $category->name }}</td>
    <td>{{ $category->products_count }}</td>
  </tr>
@endforeach

Laravel 6.x文档-雄辩-关系-计数相关模型withCount

我不会一次返回所有产品,但是如果你这样做了,你可以按category_id分组,然后做一个计数,如果你必须的话。

return view('someview', [
    'products' => Product::with('category:id,name')->get(),
]);

然后在你需要计数的一边:

@foreach ($products->groupBy('category_id') as $group)
  <tr>
    <td>{{ $group->first()->category->name }}</td>
    <td>{{ $group->count() }}</td>
  </tr>
@endforeach

或者,您可以返回产品查询,并使用另一个查询对类别进行计数。

 类似资料:
  • 我想从最终结果中删除一些属性,并在这里找到了这个从Laravel集合中仅获取特定属性 这适用于顶层,但需要从相关项目中删除一些属性,例如用户有一个访问卡,并且访问卡的属性中有一些长文本详细信息。 我想从最终结果中删除该属性。使用链接中提到的方法是否可行?

  • 我正在学习拉威尔,有一件事我无法解决。 我有什么: 用户、帖子、评论及相应模型表 使用者php:

  • 概述 本章节介绍如何从一个系统的数据库设计模型出发,一步步设计一个系统。 在软件项目(尤其是外包软件项目)中,通常有两种情况: 客户提供软件需求书; 客户提供原型设计; 对于以上两种情况的项目,在开发的流程上是有很大的差别的,最大的差别就在于页面交互上。 客户提供软件需求书:页面数量及形态不确定,带来的复杂性也不确定;(所以,为了固化需求,通常会跟客户做出原型或者UI进行需求确认,跟客户的合同也会

  • 我在为我的项目中的搜索函数编写雄辩的查询时遇到了问题。以下是我的数据库表/模型: 一个艺术家有许多艺术作品,一个艺术作品有许多风格,也有许多艺术家。我已经验证了这些关系是否正常工作。我也有一个简单的形式,返回id作为一个请求与变量和。 因此,我想在函数中做两件事:首先,检查请求中的变量是否已设置(我已经可以这样做了)。然后,使用ELOQUENT根据表单的结果查询模型。 这里有一个例子:用户搜索米开

  • 这是我无法解决的问题: 我有一个Clients表和一个box表 每个框属于一个客户端 我需要显示所有客户机,其中完成了属于每个客户机的所有框,这基本上就是where box。status=“已完成”。 我很难掌握如何在一个查询中完成这一切: -获取所有客户端 -获取属于每个客户端的所有框的计数($总框) -获取属于每个客户端的完成框的计数($完成框) -计算如果只显示客户端的位置 我用这个来得到C

  • 我有用于数据库的Spring Boot App和MongoDB。 在数据库中,我有一个集合packageholiday,其中有一些元素,这是JSON: 我的目标是什么: 正如你们所见,我在集合中有这样的数组: 所以我的问题实际上是创建API,它将从集合中返回具有指定的元素。 例如 的API 例如,对于相同的 的API 我怎样才能做到这一点?这样可能吗?