【问题标题】:Laravel collection with ampersand undefined property具有&符号未定义属性的Laravel集合
【发布时间】:2021-08-08 22:19:54
【问题描述】:

我正在 dding 一个集合,因为我在寻找对象的属性时遇到问题:

dd($this->plan);

输出:

Illuminate\Support\Collection {#5314
  #items: array:3 [
    "ageRange" => "Under 18"
    "goal" => null
    "duration" => & "Indefinitely"
  ]
}

我正在寻找此对象上的属性 duration,但是当我点击:$plan->duration 时,我收到以下错误:

dd($this->plan->duration);

我收到以下错误:

Property [duration] does not exist on this collection instance.

我认为这与 & 有关,但我不确定它为什么在那里或来自哪里

【问题讨论】:

  • First 只返回数组中的第一个值,所以不幸的是这没有帮助
  • 所以我已经更新以提供一个更好的数组示例,如果我点击 $this->plan->first() 我会得到字符串 Under 18 而没有别的
  • (清理了一些 cmets)。现在肯定更清楚了;你能提供生成这个集合的代码吗?下面的答案有效吗?
  • 集合由前端作为请求的一部分提供,我所做的就是像这样收集它:$this->plan = collect($plan);
  • 明白了!为混乱道歉。所以你基本上是在做collect(['ageRange' => 'Under 18', 'goal' => null, 'duration' => 'Indefinitely']),这会导致该单个数组的集合。数组访问['duration'] 而不是对象访问->duration 是要走的路。如果您想让$this->plan->duration 工作,只需执行$this->plan = (object)$plan。仍然不确定& 虽然????

标签: laravel laravel-collection


【解决方案1】:

那是一个数组,而不是 Collection 中的一个对象。尝试$this->plan->get('duration')$this->plan['duration']


正如@Peppermintology 评论中的问题/答案所指出的那样,这是因为“持续时间”键是通过引用设置的。为了说明,这里有一个在tinker 控制台中重现行为的快速方法:

【讨论】:

  • 这确实有效,所以已经投票了,仍然想了解与 & 符号发生了什么
  • @LewisSmith this answer 是否帮助您清理 & 符号。
  • “持续时间”被设置为引用变量。我在tinker 会话中复制了这个。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
相关资源
最近更新 更多