首页 > 解决方案 > Laravel:急切加载belongsTo和HasMany关系?

问题描述

我有两个模型 Product 和 ProductCategory 是相关的,一个产品属于一个产品类别,一个产品类别可以有很多产品。

这是我的模型:

产品:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
    protected $table = 'products';
    public function productcategory()
    {
        return $this->belongsTo('App\Models\ProductCategory');
    }
}

产品分类:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProductCategory extends Model
{
    protected $table = 'productcategories';
    public function products()
    {
        return $this->HasMany('App\Models\Product');
    }
}

我检索所有类别及其各自附加的产品,如下所示:

$productCategories = ProductCategory::with('products')->get();

这可行,但我想要它以便我可以从产品中访问产品类别信息,这是因为我使用 vue 循环遍历每个类别产品,但我需要从产品本身访问类别信息,而不仅仅是 product_category_id 而是其他字段!

在我的组件中,我想这样做:

product.productcategory.name

但目前我只能访问:

product.product_category_id

我宁愿不对我的 API 进行 ajax 调用来获取这些信息,我该如何解决这个问题?

标签: javascriptphplaravelvue.js

解决方案


您可以像这样轻松使用嵌套急切加载

$productCategories = ProductCategory::with('products', 'products.productcategory')->get();

但是您应该考虑直接在您的 vue 文件中重新使用 ProductCategory 值。


推荐阅读