属性 [group] 在此集合实例上不存在
Property [group] does not exist on this collection instance
我在 blade 上检索了一个产品项目的实例,所以当我这样做时 dd($product)
,我得到了这个结果:
并且 Product
模型连接到 GroupProduct
模型,如下所示:
public function groupproducts()
{
return $this->hasMany(GroupProduct::class,'product_id','id');
}
所以在 group_product
table,产品有这样的自定义 group_id
:
所以当我这样做时 dd($product->groupproducts);
我正确地得到了这个结果:
然后在模型 GroupProduct
中,我添加了这两个关系:
public function product()
{
return $this->belongsTo(Product::class,'product_id','id');
}
public function group()
{
return $this->belongsTo(Group::class,'group_id','id');
}
现在我需要访问检索到的 product_id
附带的组的名称,但是当我尝试这样做时:
dd($product->groupproducts->group->name);
我收到这个错误:
属性 [组] 在此集合实例上不存在。
但是这些关系似乎已应用并且应该显示组名...
所以这里出了什么问题?我该如何解决这个问题?
更新#1:
控制器:
public function addAttribute(Product $product)
{
return view('admin.products.addAttribute', compact('product'));
}
$product->groupproducts
是产品的集合(数组)。
你可以这样做:
dd($product->groupproducts->first()->group->name);
这将从集合中获取第一个元素,它是 Group
class.
的实例
你必须使用嵌套关系:
1- 您可以通过以下方式在您的模型中使用它:
public function groupproducts()
{
return $this->hasMany(GroupProduct::class,'product_id','id')->with('group');;
}
2- 你可以在你的控制器中使用它:
Products::with('groupproducts.group')->get()
您的产品模型与组产品模型的关系是 one to many。这意味着,即使只有一个结果,您也会收到一个集合。
您可以在自己的屏幕截图中看到,$product->groupproducts
的 return 值是包含 1 个项目的集合实例。
如果您只想要第一个,则应将关系更改为 one to one。
但是,如果在这种特殊情况下您只想要第一个,则应该在 query 实例上调用第一个,不是在 集合 实例上。
所以$product->groupproducts()->first()->group->name
。这样您就不会从数据库中加载 x 个数量,而只会加载 1 个数量,速度要快得多。
我在 blade 上检索了一个产品项目的实例,所以当我这样做时 dd($product)
,我得到了这个结果:
并且 Product
模型连接到 GroupProduct
模型,如下所示:
public function groupproducts()
{
return $this->hasMany(GroupProduct::class,'product_id','id');
}
所以在 group_product
table,产品有这样的自定义 group_id
:
所以当我这样做时 dd($product->groupproducts);
我正确地得到了这个结果:
然后在模型 GroupProduct
中,我添加了这两个关系:
public function product()
{
return $this->belongsTo(Product::class,'product_id','id');
}
public function group()
{
return $this->belongsTo(Group::class,'group_id','id');
}
现在我需要访问检索到的 product_id
附带的组的名称,但是当我尝试这样做时:
dd($product->groupproducts->group->name);
我收到这个错误:
属性 [组] 在此集合实例上不存在。
但是这些关系似乎已应用并且应该显示组名...
所以这里出了什么问题?我该如何解决这个问题?
更新#1:
控制器:
public function addAttribute(Product $product)
{
return view('admin.products.addAttribute', compact('product'));
}
$product->groupproducts
是产品的集合(数组)。
你可以这样做:
dd($product->groupproducts->first()->group->name);
这将从集合中获取第一个元素,它是 Group
class.
你必须使用嵌套关系:
1- 您可以通过以下方式在您的模型中使用它:
public function groupproducts()
{
return $this->hasMany(GroupProduct::class,'product_id','id')->with('group');;
}
2- 你可以在你的控制器中使用它:
Products::with('groupproducts.group')->get()
您的产品模型与组产品模型的关系是 one to many。这意味着,即使只有一个结果,您也会收到一个集合。
您可以在自己的屏幕截图中看到,$product->groupproducts
的 return 值是包含 1 个项目的集合实例。
如果您只想要第一个,则应将关系更改为 one to one。
但是,如果在这种特殊情况下您只想要第一个,则应该在 query 实例上调用第一个,不是在 集合 实例上。
所以$product->groupproducts()->first()->group->name
。这样您就不会从数据库中加载 x 个数量,而只会加载 1 个数量,速度要快得多。