php - 奇怪的雄辩行为:如果条件在 foreach 内,则不起作用
问题描述
我有下一个代码:
$list = SparePartApplicationPositionProvider::where('app_id',$app_id)->with(['provider','application_position'])->orderBy('apos_id')
->get();
它按位置显示提供者,所有工作都很好。
我想更改一些值,在这种情况下它可以工作:
foreach ($list as $value) {
if(($value->id > 3)){
$value->enter_price=3141592;
};
}
但在这种情况下它不起作用
if($value->id > 3){
if($value->application_position->id == 26){
$value->application_position->name_detail='test';
}
};
它不会“看到” ($value->id > 3) 条件,仅适用于 ($value->application_position->id == 26) 条件。怎么修?
解决方案
在这种情况下,
$value->application_position;
将尝试application_position
通过$value
魔法访问。这将返回 null,因此您的if
函数将返回 false。
所以你需要做的就是像函数一样调用它,并id
在你遍历集合时访问
$value->application_position();
所以你的代码应该是这样的
if($value->id > 3){
$positions = $value->application_position();
foreach($positions as $position){
if($position->id == 26){
$position->name_detail = 'test';
}
}
};
推荐阅读
- node.js - 在 Ubuntu 16 上运行的电子 ELIFECYCLE 错误
- image-processing - 单像校正软件
- angular - 退出全屏模式时不调用 Esc 函数
- wordpress - Wordpress 高级分类法(类别)在帖子类型中过滤
- php - php 文件从一台服务器传输到另一台服务器
- c++ - 纹理映射到平铺
- c++ - 如何访问由派生类中的构造函数初始化的数组中的数据?
- ruby-on-rails - 使用 VCR 运行规格而不明确指定磁带名称
- javascript - 重新加载路由不会刷新 api 调用
- docker - docker push/pull 是原子的吗?