用雄辩的ORM查询数据库时的数组索引问题

时间:2020-01-22 03:07:53

标签: php laravel

运行此方法时出现问题:

value union is not a member of scala.concurrent.Future[(scala.concurrent.Future[org.apache.spark.sql.DataFrame], scala.concurrent.Future[org.apache.spark.sql.DataFrame], scala.concurrent.Future[org.apache.spark.sql.DataFrame])]..

引发的异常如下: 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,但是控制台告诉我找不到卡路里的索引。同样奇怪的是,该行没有抛出异常:

val future_session = Future{ ProcessSession(df, spark) }
val future_links =  Future{ ProcessSession(df, spark) }
val future_nodes = Future { ProcessSession(df, spark) }

val result = for {
      r1 <- future_session
      r2 <- future_links
      r3 <- future_nodes
} yield ( 
   r1,r2,r3
)

result.onComplete {          
    case Success(x) => {
      log.info("Execution completed")       
    }
    case Failure(e) => e.printStackTrace
}

我使用雄辩的关系获取营养价值,这是与成分之间的关​​系。

感谢您的帮助!

编辑:我正在循环内调用函数:

    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

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

编辑2:问题已解决!

1 个答案:

答案 0 :(得分: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;
}