繁体   English   中英

Laravel雄辩的变更属性,按字段名称

[英]Laravel eloquent change attribute by field name

模型后的我的模型结构-> find($ id);

  protected 'attributes' => 
    array (size=35)
      'id' => string '1234134' (length=6)
      'case' => string '123123' (length=7)

我想像这样更新这个模型

foreach($input as $key => $value){
                var_dump($key);
                $case->($key)= $value;
            }
    $case -> save();

我这样尝试过,但不起作用

$reflection = new \ReflectionClass($case);  
    foreach($input as $key => $value){
                var_dump($key);
                $reflection->"$ke"y;
            }

下面的代码应该工作。

$reflection = new \ReflectionClass($case);

foreach($input as $key => $value){
    var_dump($key);
    $reflection->{$key} = $value;
}

$case->save();

看来您的语法有点不对劲,请尝试以下操作:

foreach($input as $key => $value){
    $case->{$key} = $value;
}

$case->save();

您的问题是您试图以PHP不支持的方式访问对象的属性。

要通过使用包含对象名称的变量来访问对象的属性,您需要使用字符串插值。 Wikipedia-字符串插值可以通过使用大括号{}而不是大括号()来实现

您可以这样修改示例:

foreach($input as $key => $value){
    $case->{$key}= $value;
}
$case->save();

顺便说一下,在PHP中可以像在第二个示例中一样实现,但是没有双引号

 foreach($input as $key => $value){
    $case->$key= $value;
 }
 $case->save();

我个人更喜欢使用大括号,因为它更清楚地表明我正在使用变量的字符串值。

如果这是laravel雄辩的模型,则可以利用fill方法的使用。

$case->fill($input);
$case->save();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM