gpt4 book ai didi

php - Eloquent ORM查询数据库时数组索引的问题

转载 作者:行者123 更新时间:2023-12-04 10:42:42 25 4
gpt4 key购买 nike

运行此方法时遇到问题:

    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;
}

抛出的异常如下:
enter image description here

当我添加变量时,我得到了这个。
  • 对于 $item->nutritionalValue :

  • enter image description here
  • 对于 $item->nutritionalValue['calories'] :

  • enter image description here
  • 对于 $nutritionalValues:

  • enter image description here

    我不明白的是 $item->nutritionalValue['calories'] 是正确的 dd 但控制台告诉我无法找到卡路里的索引。奇怪的是,该行没有抛出异常:
    $nutritionalValues['weight'] = $nutritionalValues['weight'] + $item->nutritionalValue['weight'];

    我使用 Eloquent 关系来获取营养值(value),这是与成分的关系。

    谢谢您的帮助 !

    编辑:我在循环内调用函数:
    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;
    }

    现在我有错误:
    enter image description here

    我不知道这怎么可能,因为发送到此方法的每个数组都是相同的...

    编辑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;
    }

    关于php - Eloquent ORM查询数据库时数组索引的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59852060/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com