【问题标题】:Changing an eloquent object value when iterating迭代时更改 eloquent 对象值
【发布时间】:2021-10-06 09:11:32
【问题描述】:

为了简化问题,当我遍历 eloquent 查询返回的对象数组时,当我尝试更改其中一个属性时,它似乎正在更改它们的所有属性。

假设 fruits 是 eloquent 查询返回的数据

var fruits =[{name:apple,nested_relationship:{price:$5},{name:pear,{price:$6},{name:grape}]

foreach ($fruits as fruit){
  if($fruit->name == 'apple'){
     $fruit->nested_relationship->color = 'red';
  }
  elseif($fruit->name == 'grape'){
     $fruit->nested_relationship->color = 'green';
  }
}

最后的结果好像是[{name:'apple',nested_relationship:{price:$5,color:'green'}},{name:pear,nested_relationship:{price:$5,color:'green'}},},{name:'grape'}]

谁能告诉我这是怎么回事?

【问题讨论】:

  • 在这里找不到问题。我认为我们需要查看您的原始代码。
  • @ya-cha 我做了一些编辑以更好地反映情况。嵌套关系可能是导致问题的原因吗?
  • nested_relationship 是否可能是同一个关系?
  • @ya-cha 你是什么意思?这个stackoverflow.com/questions/69463617/… 可能更能代表这个问题,如果可能,请帮助我
  • 和@ya-cha 如果关系相同,是否可以编辑一个而不编辑另一个

标签: php laravel eloquent


【解决方案1】:

试试这个解决方案:

使用 setAttribute() 添加新属性。

var fruits =[{name:apple,nested_relationship:{price:$5},{name:pear,{price:$6},{name:grape}]

foreach ($fruits as $fruit){
  if($fruit->name == 'apple'){
     $fruit->nested_relationship->setAttribute('color', 'red');
  }
  elseif($fruit->name == 'grape'){
     $fruit->nested_relationship->setAttribute('color', 'green');
  }
}

【讨论】:

  • 遗憾的是它不起作用,我感觉它改变了参考水果的值但是当 error_logging $fruits 时,变化被错误地反映了
  • 您的预期和当前输出是什么?
  • stackoverflow.com/questions/69463617/…。这可能是问题的一个更好的例子,请帮帮我
猜你喜欢
  • 2013-04-03
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2020-05-04
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多