奇怪的口才行为:如果条件在foreach中不起作用

时间:2018-08-24 14:17:54

标签: php laravel laravel-5 eloquent

我有下一个代码:

ALTER DATABASE <your database> SET COMPATIBILITY_LEVEL = 130;  
GO

按位置显示提供者,所有工作都很好。

我想更改一些值,在这种情况下,它可以工作:

$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;
            };
        }

它不“看到”($ value-> id> 3)条件,仅工作($ value-> application_position-> id == 26)条件。如何解决?

2 个答案:

答案 0 :(得分:0)

在这种情况下

$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';
        }
    }
};

答案 1 :(得分:0)

application_position是对象的集合。您需要对其进行遍历,以找到ID为26的ID。

if($value->id > 3){
    foreach($value->application_position as $position) {
       if($position->id == 26){
           $position->name_detail='test';
           $position->save(); // Don't forget to save, or else it won't update
       }
   }

};