Как оставить данные в базе данных, если поле редактирования оставлено пустым - PullRequest
0 голосов
/ 01 марта 2019

Я получаю много входных данных от пользователя при создании формы (> 50 полей), где я хотел бы редактировать эти данные в форме редактирования.

Я сделал все поля обнуляемыми, чтобы при редактированииполя остаются одни,

Контроллер:

public function update(Request $request, $id)
{
     $engineers = Engineers::findOrFail($id);
     $engineers->input1 = $request->input('input1');
     $engineers->input2 = $request->input('input2');
     $engineers->input3 = $request->input('input3');
     $engineers->input4 = $request->input('input4');
     $engineers->save();
}

Когда я пытаюсь редактировать input2, оставляя все пустым, все остальные поля остаются пустыми в базе данных.

Другой вариант, который я обнаружил, был

public function update(Request $request, $id)
{
    $engineers = Engineers::findOrFail($id);
    if($request->input('input1')){
        $engineers->input1 = $request->input('input1');
    }
    if($request->input('input2')){
        $engineers->input2 = $request->input('input2');
    } 
    if($request->input('input2')){
        $engineers->input2 = $request->input('input2');
    }
     if($request->input('input2')){
        $engineers->input2 = $request->input('input2');
    }

    $engineers->save();
}

. При выполнении вышеизложенного соответствующая запись изменяется, а все остальные поля остаются без изменений.

Я также заметил, что можно отправить пустую форму редактирования.

Есть ли другой лучший подход к этому?

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Сделайте так, этот шаг также выглядит коротко,

$engineers = Engineers::findOrFail($id);
$engineers->fill($request->all())->save();
0 голосов
/ 01 марта 2019

Вы можете отфильтровать ввод перед заполнением записи, например:

$engineers = Engineers::findOrFail($id);
$engineers->fill(array_filter($request->all()))->save();

Это удалит все ложные записи, т.е. null, но также 0 и ''

Если вы хотите строго удалить нули, тогда вы можете сделать:

$engineers = Engineers::findOrFail($id);
$engineers->fill(array_filter($request->all(), function ($value) { 
        return $value !== null; 
}))->save();
0 голосов
/ 01 марта 2019

filled метод $request используется в этом случае.

if($request->filled('name')){
  //if name is present in request object and not empty.
}

Подробнее об этом здесь

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