Странное красноречивое поведение: не работает дважды, если условие внутри foreach - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующий код:

$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). Как исправить?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

application_position - это коллекция объектов.Вам нужно будет пройти через это, чтобы найти тот с идентификатором 26.

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

};
0 голосов
/ 24 августа 2018

В этом случае

$value->application_position;

попытается получить доступ к application_position из $value с помощью магии. который вернет ноль, и поэтому ваша 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';
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...