【问题标题】:Laravel eloquent change attribute by field nameLaravel eloquent 按字段名称更改属性
【发布时间】:2016-06-24 11:50:35
【问题描述】:

模型后我的模型结构 -> 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;
            }

【问题讨论】:

  • 您应该使用大括号而不是圆括号。示例:$case->{$key}
  • 我不知道我可以像数组一样访问 eloquent 对象。我可以像 Case[$key] = $value
  • 不,你不能。您显示的是方括号。我说的是使用大括号。花括号用于表示 PHP 中的字符串或变量插值。
  • 是的,但我只是使用了 Case[$key] = $value;像这样并且工作了

标签: php laravel eloquent


【解决方案1】:

下面的代码应该可以工作。

$reflection = new \ReflectionClass($case);

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

$case->save();

【讨论】:

    【解决方案2】:

    你的语法好像有点不对劲,试试这个:

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

    【讨论】:

      【解决方案3】:

      您的问题是您试图以 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();
      

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 但只有当我有可填充的属性名称时它才有效
        猜你喜欢
        • 1970-01-01
        • 2014-08-25
        • 1970-01-01
        • 2018-11-04
        • 2020-01-27
        • 1970-01-01
        • 2019-12-10
        • 2011-05-24
        • 2012-01-18
        相关资源
        最近更新 更多