我不知道我做错了什么,我有一个foreach循环和里面的咨询,当我试图通过该对象获取数据时,它说它和非对象我不能得到数据。
public function actualizar_costo_promedio()
{
$empresas = Empresa::all();
$anteriores_exist = 0;
foreach ($empresas as $empresa) {
$producto = $empresa->productos()->where('producto_nombre_id', 1)->first();
$anteriores_exist += $producto->existencias;
}
}
如果我这样做,它会给我这个错误,但是如果我只更改$producto = $empresa->productos()->first();
的位置就可以了
我已经使用$empresa = Empresa::find(1);
进行了其他测试,经过咨询$producto = $empresa->productos()->where('producto_nombre_id', 1)->first();
并且也有效,所以我不明白它的错误
答案 0 :(得分:0)
所以让我告诉你这是什么问题,这段代码:
$empresas = Empresa::all();
返回一个集合或数组数组。
现在,当你正在进行预告时,你正在试图Empresa
,但是你正在访问一段关系
$empresa->productos()
从错误中我可以判断它是一对多的关系,因为它发生了错误,因为它返回你的另一个集合的关系,你试图访问一个抛出错误的属性。
但是当你拿起集合中的第一个项目时,你实际上访问了包含所有数组的数组中的第一个arrray!因此,它的工作:
$producto = $empresa->productos()->where('producto_nombre_id', 1)->first();
因此,如果你想让它工作,你需要在foreach中进行另一次iterration,或者正如我能够正确理解你想要获得现有产品Empresa
你能做到的:
$anteriores_exist = $empresas->map(function($row){
$products = $row->productos()->where('id', 1)->get();
return $products->filter(function($row){
return $row->existencias;
});
});