Vuejs Axios, как передать массив с ключом? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь опубликовать в своем бэкэнде Laravel некоторые данные в виде массива 'offer':

Вот как это выглядит в почтальоне и работает: keys: offer [title] , предложение [описание] , предложение [author_user_id]

теперь с axios я пробовал что-то вроде:

 offer: {
         title: this.input.title,
         description: this.input.description,
         author_user_id: id,
         }

пробовал также с: [key => val] и, например, offer.title: значение , но также не удалось.

Как это должно выглядеть?

РЕДАКТИРОВАТЬ:

this.axios.post('http://api.wip/api/offer/store', {
                    offer: {
                        title: this.input.title,
                        description: this.input.description,
                        author_user_id: id,
                    },
                    category: 2
                }, {
                    headers: {
                        'Authorization': 'Bearer ' + token,
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'X-Requested-With': 'application/json'
                    }
                })
                .then(function () {
                })
                .catch(function () {
                });

В моей консоли я вижу, что это отправляется как:

{"offer":{"title":"asd","description":"asd","author_user_id":"2"},"category":2}: 

Я получаюОшибка 500 от сервера с ответом от Laravel о том, что он ожидает, что данные будут массивом.

"message": "Argument 1 passed to Illuminate\\Database\\Eloquent\\Builder::create() must be of the type array, null given, called in D:\\wamp64\\www\\apitest\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php on line 23",

Как я уже говорил, он работает с почтальоном, но не может сделать это из axios

Контроллер Laravel:

 public function store(Request $request) {
        $offer = Offer::create($request->input('offer'));
        $offer->category()->sync($request->input('category'));
        $offer->save();

        return response()->json($offer);
    }

1 Ответ

0 голосов
/ 25 октября 2018

Boussadjra Brahim прав, проблема в бэкэнде, но она вызвана отправкой нулевых значений из внешнего интерфейса, поэтому мы должны взглянуть на внешний интерфейс.

во-первых, использование {} означает, что вы создаете объект, [] - это метод массива и laravel, принимающий только массив.

вход является самим массивом, так как вы обращаетесь к нему ключами (точка), так почему бы просто не задать предложение для всего массива, а затем разделить их вбэкэнд?как это

axios.post('http://api.wip/api/offer/store', {
                    offer:this.input,
                 author_user_id: id,
                    category: 2
                },

в вашем бэкэнде вы можете получить к ним доступ как:

$title = $request->offer['title'];

И последнее: когда вы используете метод create, ключи должны совпадать с именем столбцав базе данных или он выдаст ошибку!надеюсь, это поможет

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