[英]Problem of array index when querying the database with Eloquent ORM
运行此方法时遇到问题:
public function getNutritionalValuesPerMeal($item,$nutritionalValues){
foreach (array($nutritionalValues) as $key => $value) {
if (array_key_exists($key, $item->nutritionalValue->attributes)) {
$nutritionalValues[$key] += $item->nutritionalValue->attributes[$key];
}
}
return $nutritionalValues;
}
当我添加变量时,我得到了这个。
我不明白的是 $item->nutritionalValue['calories'] 是正确的 dd 但控制台告诉我无法找到卡路里的索引。 奇怪的是,该行没有抛出异常:
$nutritionalValues['weight'] = $nutritionalValues['weight'] + $item->nutritionalValue['weight'];
我使用 Eloquent 关系来获取营养价值,这是与成分的关系。
谢谢您的帮助 !
编辑:我在循环内调用函数:
public function getNutritionalValuesPerDay($mealNutritionalValues,$items,$day){
foreach($items as $item){
switch ($item->pivot->meal) {
case "Breakfast":
$mealNutritionalValues["Breakfast"] = $this->getNutritionalValuesPerMeal($item,$mealNutritionalValues["Breakfast"]);
break;
case "Snack 1":
$mealNutritionalValues["Snack 1"] = $this->getNutritionalValuesPerMeal($item,$mealNutritionalValues["Snack 1"]);
break;
case "Lunch":
$mealNutritionalValues["Lunch"] = $this->getNutritionalValuesPerMeal($item,$mealNutritionalValues["Lunch"]);
break;
case "Snack 2":
$mealNutritionalValues["Snack 2"] = $this->getNutritionalValuesPerMeal($item,$mealNutritionalValues["Snack 2"]);
break;
case "Dinner":
$mealNutritionalValues["Dinner"] = $this->getNutritionalValuesPerMeal($item,$mealNutritionalValues["Dinner"]);
break;
}
}
return $mealNutritionalValues;
}
我不知道这怎么可能,因为发送到此方法的每个数组都是相同的...
编辑2:问题解决了!
在不知道方法的范围和上下文的情况下,访问属性的最安全方法是$item->nutritionalValue->attributes['calories']
等。更多信息: https : //laravel.com/docs/6.x /eloquent-mutators#attribute-casting
为什么dd()
可以访问该属性 - 这是因为dd()
在对象上运行某种get()
方法。
除此之外,我将重构您的方法如下:
public function getNutritionalValuesPerMeal($item, $nutritionalValues)
{
foreach ($nutritionalValues as $key => $value) {
if (array_key_exists($key, $item->nutritionalValue->attributes)) {
$nutritionalValues[$key] += $item->nutritionalValue->attributes[$key];
}
}
return $nutritionalValues;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.