Eloquent DB :: Post-> where () -> update () возвращает 1 всегда независимо от внесенных изменений - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь выяснить, как правильно закодировать функцию update () в eloquent, чтобы она возвращала 0 или 1 на основе пользовательского ввода в форме.Например, если я нажимаю кнопку обновления без внесения каких-либо изменений, он возвращает 1. Разве он не должен возвращать 0?

Я попытался найти решения, подобные здесь, в stackoverflow, чтобы выяснить, есть ли у кого-то такая же проблема, как у меня.сталкиваюсьНо пока не удача.Я также пытался изменить код, но безуспешно.

public function update(Request $request, $id)
{

    $UCPost = UCPost::find($id);

    $UCPost->gown_2019 = $request->input('Gown2019');
    $UCPost->gown_2017_2018 = $request->input('Gown20172018');
    $UCPost->gown_2016 = $request->input('Gown2016');
    $UCPost->gown_2015 = $request->input('Gown2015');
    $UCPost->Light_Blue = $request->input('LightBlue');
    $UCPost->Seconds = $request->input('Seconds');
    $UCPost->Velveteen = $request->input('Velveteen');
    $UCPost->Velveteen_discolored = $request->input('Velveteen_discolored');
    $UCPost->Rental = $request->input('Rental');
    $UCPost->Rentals_Out = $request->input('Rentals_Out');
    $UCPost->Rentals_Left = $request->input('Rentals_Left');
    return $UCPost->where('id', $id)->update(
        [
            'gown_2019' => $UCPost->gown_2019,
            'gown_2017_2018' => $UCPost->gown_2017_2018,
            'gown_2016' => $UCPost->gown_2016,
            'gown_2015' => $UCPost->gown_2015,
            'Light_Blue' => $UCPost->Light_Blue,
            'Seconds' => $UCPost->Seconds,
            'Velveteen' => $UCPost->Velveteen,
            'Velveteen_discolored' => $UCPost->Velveteen_discolored,
            'Rental' => $UCPost->Rental ,
            'Rentals_Out' => $UCPost->Rentals_Out,
            'Rentals_Left' => $UCPost->Rentals_Left
        ]

    );
}

Приведенный выше код, как я уже упоминал, всегда возвращает 1 независимо от любых изменений, внесенных в форму.Я хочу, чтобы он возвращал 0, если нет никаких изменений пользователем или если они случайно нажали кнопку обновления.Я пытаюсь найти эквивалент mysqli_affered_rows в Eloquent.

1 Ответ

0 голосов
/ 12 июля 2019

Вы вызываете метод update() в вашей модели.Возвращает 1, если обновление прошло успешноНе имеет значения, были ли внесены какие-либо изменения, при успешном обновлении всегда 1.

Если вы хотите сохранить в базу данных только при наличии изменений, вы можете использовать метод save(), которыйпроверяет наличие изменений и записывает данные в базу данных, только если данные отличаются.Вы уже создали код для этого, настроив модель на получение всех новых данных с листа, так что простой save() в конце (с проверкой, сохраняет ли он) будет делать то, что вы хотите.

Тем не менее, ваш текущий код выполняет лот дополнительной работы.Вы присваиваете все переменные модели, а затем обновляете на основе этого присвоения данных модели.Вам не нужно делать все это назначение снова в методе обновления.После того, как вы установили поля, вы можете сохранить сразу, вам не нужно переназначать все переменные.Итак:

$UCPost->gown_2019 = $request->input('Gown2019');
// etc..
$UCPost->Rentals_Left = $request->input('Rentals_Left');

$UCPost->save();

Переместит вас туда, куда вы хотите, и сохранит, только если отличается.

Если вы контролируете свою форму и можете изменить имена элементов формы, чтобы они соответствовали вашимбазе данных, это может быть еще прощеВы можете сделать все это в одной строке:

$UCPost->update($request->all());

Если вы хотите проверить, не загрязнена ли модель, просто вызовите isDirty ():

if($UCPost->isDirty()){
    // changes have been made
}

Наконец, если вы хотитепроверьте, было ли что-либо изменено после любого из методов (сохранить или обновить):

if ($UCPost->wasChanged()) {
    // changes have been made
}

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

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