有一个类别模型和一个产品模型。这些模型之间存在多对多的关系。在类别页面上,我们获取该类别的所有产品,以及每个产品的所有类别。
例子。
$category->type
$category->name
@foreach ($category->products as $product)
$product->name
@foreach ($product->categories as $category)
$category->type
$category->name
@endforeach
@endforeach
在我们得到的输出。
Manufacturer
Alize
Alize Lana Gold
Manufacturer
Alize
Country
Turkey
Fiber
Acrylic
每个类别都有自己的类型。例如:国家、制造商或光纤。国家、制造商或成分的类别。一种产品总是有一个国家和制造商,但可以有许多纤维。
是否有可能以某种方式重建(我不知道怎么说正确)集合,以便返回产品及其所属的所有类别?
也就是说,能够这样做。
$category->type
$category->name
@foreach ($category->products as $product)
$product->country // категория
$product->manufacturer // категория
$product->name
@foreach ($product->fibers as $fiber) // категория
$fiber->name
@endforeach
@endforeach
我们明确地写出 Country、Manufacturer 并且只在数组中迭代 Fiber,因为一个产品可以有很多这种类型的类别。
首先,如果 Country、Manufacturer 和 Fiber 是您经常需要作为 belongsTo 的一些 belongsToMany 类别,那么您显然在做一些奇怪的事情,将它们分开不是更容易吗?
现在说到重点。我为您看到了 2 个选项。
选项 1:产品模型中的吸气剂
我们只是将 getter 添加到模型中,以查看我们关系的集合。
选项 2:产品模型中的关系
有了
fibers,我们只需在我们的关系中添加一个条件:C
country和manufacture更难。您可以在此处使用hasOneThrough关系(https://laravel.com/docs/8.x/eloquent-relationships#has-one-through)通过数据透视表(belongsToMany)获取关系,但是在这里您必须创建一个数据透视表的数据透视模型。