Как передать данные из Vue в Laravel для запроса патча?

Я пытаюсь отправить запрос на исправление из моей таблицы данных Vuetify в Laravel, а затем в базу данных mySQL.

Вот различные фрагменты кода из моего controller.php, моего api.php и фактического файла Vuetify:

api.php:

Route::patch('machines/{id}', [
    'as'   => 'machines/{id}',
    'uses' => 'MachineController@update'
]);

MachineController.php

$machines = Machine::find($request->id)->update();

актуальный патч axios req. в файле .vue:

Object.assign(this.machines[this.editedIndex], this.editedItem);

axios.patch("machines/" + this.editedItem.id, {
    editedItem: this.editedItem
})

В разделе полезной нагрузки телескопа я получаю обновленный объект, но также получаю сообщение:

«SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец не может быть пустым.

Для всех столбцов.

Я также пробовал этот синтаксис для метода исправления:

if (this.editedIndex > -1) {
    Object.assign(this.machines[this.editedIndex], this.editedItem);
    axios
        .patch("machines/" + this.editedItem.id)
        .then(res => {
            this.editedItem = Object.assign({}, this.editedItem);
        })
        .catch(err => {
            console.log(err);
        });
} else {
    this.machines.push(this.editedItem);
}
this.close();

И я попытался настроить контроллер следующим образом:

$machines = Machine::find($request->id);
$machines->machine_number = $request->input('machine_number');
$machines->machine_name = $request->input('machine_name');
$machines->machine_company = $request->input('machine_company');
$machines->machine_division = $request->input('machine_division');
$machines->machine_center = $request->input('machine_center');
$machines->machine_speed = $request->input('machine_speed');
$machines->save();

Но я все еще получаю ту же ошибку. Может ли кто-нибудь помочь мне или хотя бы указать мне правильное направление? Спасибо!


person Pok3r Princ3    schedule 13.05.2019    source источник
comment
Вы dd($request->all()) смотрели, не проходит ли что-нибудь?   -  person thisiskelvin    schedule 13.05.2019
comment
@thisiskelvin Я только что сделал, и ничего не произошло. Ничего не показалось, ничего не изменилось; /. Не совсем так: когда я добавил dd($request->all()); в контроллер, Telescope перестал регистрировать запрос на исправление.   -  person Pok3r Princ3    schedule 13.05.2019
comment
Вы против использования post вместо patch? Не то чтобы это решение.   -  person thisiskelvin    schedule 13.05.2019
comment
@thisiskelvin Насколько я понимаю, для обновления выбранных полей из таблицы вы должны использовать patch req. Я могу ошибаться.   -  person Pok3r Princ3    schedule 13.05.2019
comment
Не обязательно, передача id визуально означает update. Без этого следует предполагать, что вы пытаетесь store новую запись.   -  person thisiskelvin    schedule 13.05.2019
comment
Хорошо, я попробую, используя post, но меня беспокоит то, что, по-видимому, данные каким-то образом теряются между vue и контроллером (я регистрирую их, когда отправляю patch req., И он там, он находится в Полезная нагрузка телескопа, но до БД не доходит.   -  person Pok3r Princ3    schedule 13.05.2019
comment
Это то, что меня беспокоит. Это может быть проблема с аксиомами. Лучший способ проверить - это изменить с patch на post и посмотреть, все ли работает так, как задумано.   -  person thisiskelvin    schedule 13.05.2019
comment
@thisiskelvin Я изменил методы с patch на post как в axios req. & контроллер, но ведет себя так же, как и раньше. Я относительно новичок в подключении Laravel и mySQL к Vue, могу ли я предоставить дополнительную информацию, которая поможет в решении проблемы?   -  person Pok3r Princ3    schedule 13.05.2019
comment
Вы используете код, содержащий оператор this.close()? Если да, то ваш patch метод не имеет данных, переданных в качестве второго аргумента.   -  person thisiskelvin    schedule 13.05.2019
comment
@thisiskelvin Это код в методе this.close(): `close () {this.dialog = false; setTimeout (() = ›{this.editedItem = this.editedItem; this.editedIndex = -1;}, 300); } `Однако я закомментировал это и просто вызываю` this.dialog = false; `закрыть диалоговое окно при сохранении   -  person Pok3r Princ3    schedule 13.05.2019
comment
@thisiskelvin Я удалил как метод this.close(), так и метод this.dialog = false;, но это не помогло. ; /   -  person Pok3r Princ3    schedule 13.05.2019
comment
Более того, если говорить о добавлении данных в метод patch, на данный момент это только .patch("machines/" + this.editedItem.id), но должно быть .patch("machines/" + this.editedItem.id, { ... })   -  person thisiskelvin    schedule 13.05.2019
comment
@thisiskelvin Вот как выглядит мой patch метод: `axios .patch (machines / + this.editedItem.id, {editedItem: this.editedItem})` Я считаю, что передаю данные после идентификатора? Я считаю, что editedItem является объектом, и this.editedItem также является объектом, поэтому я передаю его вот так. Это неправильно ?   -  person Pok3r Princ3    schedule 13.05.2019
comment
@thisiskelvin Я структурировал свой patch запрос так, результат тот же: axios .patch("machines/" + this.editedItem.id, { id: this.editedItem.id, machine_number: this.editedItem.machine_number, machine_name: this.editedItem.machine_name, machine_company: this.editedItem.machine_company, machine_division: this.editedItem.machine_division, machine_center: this.editedItem.machine_center, machine_speed: this.editedItem.machine_speed }) * Также пробовал с post.   -  person Pok3r Princ3    schedule 13.05.2019


Ответы (1)


Я решил свою проблему: я передавал пустой объект с моим axios.patch() запросом, потому что я неправильно его настроил. Я изменил структуру объекта на key:value пары и вуаля, это сработало!

person Pok3r Princ3    schedule 13.05.2019