Laravel通过字段名称改变了eloquent更改属性

时间:2016-03-09 21:22:07

标签: php laravel eloquent

模型后的模型结构 - >找到($ 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;
            }

4 个答案:

答案 0 :(得分:2)

以下代码应该有效。

$reflection = new \ReflectionClass($case);

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

$case->save();

答案 1 :(得分:1)

看起来你的语法有点偏,试试这个:

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

$case->save();

答案 2 :(得分:1)

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

要使用包含其名称的变量访问对象的属性,您需要使用字符串插值。 Wikipedia - String Interpolation 您可以使用花括号{} 代替圆括号()

来实现此目的

您可以像这样修复您的示例:

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

顺便说一句,在PHP中,这几乎可以像你的第二个例子那样实现,但没有双引号

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

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

答案 3 :(得分:1)

如果这是一个laravel eloquent模型,您可以使用fill方法。

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