我有下一个代码:
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)条件。如何解决?
答案 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
}
}
};