php - 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;
}
当我 dd 变量时,我得到了这个。
- 对于 $item->nutritionalValue :
- 对于 $item->nutritionalValue['calories'] :
- 对于 $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;
}
推荐阅读
- json - PostgreSQL 函数工作一次然后给出错误
- mysql - IFNULL() MySQL 与 ROLLUP 结合使用时无法按预期工作
- flutter - Flutter 正在解耦表情符号?
- python - 使用随机模块时出现属性错误
- javascript - 我怎样才能在未来的某个特定时间运行一个函数?
- racket - 如何为 DrRacket 插件编写软件测试?
- python - Python & Pandas:将数据附加到新列
- java - 自动化 makemytrip 网站时无法选择正确的元素
- c# - Azure webservice 自动添加 NODE_OPTIONS 环境变量导致 jsreport 抛出 JsReportBinaryException
- function - Arduino IDE 有时输出“功能”未在此范围内声明(不更改任何内容)