Странное красноречивое поведение: не работает, если условие внутри foreach

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

$list = SparePartApplicationPositionProvider::where('app_id',$app_id)->with(['provider','application_position'])->orderBy('apos_id')
->get();

Он отображает prov 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';
       }

   };

Но в этом случае он не работает

application_position

Он не «видит» ( if ( $ value -> id > 3 ) { foreach ( $ value -> application_position as $ position ) { if ( $ position -> id == 26 ) { $ position -> name_detail = 'test' ; $ position -> save (); // Не забывайте сохранять, иначе оно не будет обновляться } } }; -> id> 3) условие, только работа ($ value-> $ value -> application_position ; -> id == 26). Как исправить?

php,laravel,laravel-5,eloquent,

0

Ответов: 2


0

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

$value

0

В этом случае,

if

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