有什么想法可以使数组的代码更好吗?

时间:2019-10-10 01:21:00

标签: php arrays laravel

我有一个更新功能,可以从用户那里获取输入并将旧输入替换为新输入:

    /**
     * Update input values in $detail
     *
     * @param array $detail :validated input event data
     */
    public static function updateUserInput(array $detail)
    {
        $event              = self::find($detail['id']);
        $event->your_name   = $detail['your_name'];
        $event->email       = $detail['email'];
        $event->title       = $detail['title'];
        $event->location    = $detail['location'];
        $event->description = $detail['description'];
        $event->date        = $detail['date'];
        $event->save();
    }

但是它有很多迭代,例如$event->foo$detal['bar'];。 您将如何处理此代码以使其清晰美观?

2 个答案:

答案 0 :(得分:2)

由于数组键与模型属性相同

您可以遍历模型的属性列表并进行相应分配

public static function updateUserInput(array $detail)
{
  $event = self::find($detail['id']);
  foreach(array_keys($event->getAttributes()) as $attribute) {
    $event->$attribute = $detail[$attribute];
  }
  $event->save();
}

或者使用雄辩的fill()方法并将注释中指出的数据数组传递给它

public static function updateUserInput(array $detail)
{
  $event = self::find($detail['id']);
  $event->fill($detail);
  $event->save();
}

但是您必须将所有属性添加到模型中受保护的$fillable属性,或将$guarded设置为空数组 Event.php

protected $guarded = [];

来自the docs

希望这会有所帮助

答案 1 :(得分:1)

只要击中它

self::findOrFail($data['id'])->update($data);

请确保根据您的$ data参数索引标识符填充模型中的内容