我有三个表类别和产品,其透视表为类别产品
一个类别有很多产品
我想在产品属性中的类别名称有自己的字段。
$saijal = "Our Products";
$products = Product::orderBy('created_at','DESC')->with('categories')->get();
$abc = new Collection();
foreach($products as $pro)
{
$abc->put($pro->id,$pro);
}
foreach($products as $k => $pro)
{
$abc->get($pro->id)->children = new Collection();
$abc->get($pro->id)->categoryName= $pro->categories->name;
$abc->get($pro->id)->children->push($pro);
unset($pro[$k]);
}
dd($abc);
例如:
2条答案
按热度按时间ddrv8njm1#
可以将自定义属性添加到
appends
数组(非attributes
数组)。您可以通过以下方式访问此属性:,
笔记
将此添加到
appends
数组是。如果不将其添加到appends数组,则在调用toArray()
或者toJson()
或者发送这个$product
通过json。您将失去此属性。yebdmbv42#
如果我理解正确,您希望能够直接从产品对象访问名为“categoryname”的属性。为此,只需在product.php模型中设置如下所示的属性getter:
然后您可以简单地引用类别名称,如下所示:
我看到的主要问题是,您在代码中引用“categories”,好像它是复数。如果产品属于多个类别,那么解决方案会有所不同,您的关系将需要一个透视表,正如您所描述的那样。但是,如果产品只是属于一个类别,正如您的代码所暗示的,那么上面的解决方案就足够了,您实际上不需要透视表。您只需要在products表中直接有一个category\u id列。
如果确实希望每个产品有多个类别,可以执行类似的操作,但返回一个数组:
这将返回一个与此产品关联的类别名称数组,可以通过以下方式访问: