application_position
представляет собой набор объектов. Вам нужно будет перебрать его, чтобы найти тот, у которого есть идентификатор 26.
$value
У меня есть следующий код:
$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,
В этом случае,
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';
}
}
};