Любая идея сделать этот код лучше с массивом? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть функция обновления, которая получает ввод от пользователя и заменяет старый ввод новым:

    /**
     * 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 ]

2 голосов
/ 10 октября 2019

Так как ключи массива совпадают с атрибутами модели

, вы можете просмотреть список атрибутов модели и назначить соответственно

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

или использовать метод Eloquent fill()и передайте ему массив данных, как указано в комментариях

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

Но вам придется добавить все атрибуты к защищенному свойству $fillable в модели или установить $guarded в пустой массив Event.php

protected $guarded = [];

С Документы

Надеюсь, это поможет

1 голос
/ 10 октября 2019

Просто нажмите

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

Убедитесь, что ваша модель в вашем файле соответствует заполнению в соответствии с вашим индексом параметра $ data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...