Я не могу сохранить значения с помощью метода POST - laravel vue

Я пытаюсь сохранить данные, которые отправляю из окна просмотра событий. в методе storeEvent драйвера EventController, но он дает мне ошибку 422, и я пока не могу найти проблему.

Модель событий имеет отношение «многие ко многим» с моделью категорий, а событие также имеет отношение «многие ко многим» с моделью монет, поэтому я использую vue-multiselect, поскольку пользователь может выбрать несколько категорий или несколько монет. для того же мероприятия

Event.vue

<template>
  <form v-on:submit.prevent = "createdEvent" class = "form-horizontal">
   <div class = "form-group row">
     <label>Titulo</label>
     <input type = "text" name = "title" maxlength = "25" v-model = "title">
   </div>
   <div class = "form-group row">
     <label>*Cryptodivisas</label>
     <multiselect v-model = "coinvalue" :options = "coins"
                :multiple = "true" label = "name" 
                track-by = "id" placeholder = "Seleccione">
     </multiselect>
   </div>
   <div class = "form-group row">
     <label>*Categoría</label>
     <multiselect v-model = "categoryvalue" :options = "categories"
                :multiple = "true" label = "name" 
                track-by = "id" placeholder = "Seleccione">
     </multiselect>
   </div> 
   <div class = "col-sm-12">
     <button class = "btn" type = "submit">Crear evento</button>
   </div>
 </form>

<script>
    import Multiselect from 'vue-multiselect';
    export default {  
      components: { 
        Multiselect,
      },
      props: ['auth'],     
      data () {
        return {
            user:           {},
            title:          '',
            coins:          [],
            coinvalue:      [],
            categories:     [],
            categoryvalue:  [], 
       }
      },
      created() {
        this.getCoins();
        this.getCategories();
      },
      mounted() {
        this.user = JSON.parse(this.auth);
      },
      methods: {
        getCoins(){
            let urlCoin = '/dashboard/coins';
            axios.get(urlCoin)
                .then((response) => {
                    this.coins = response.data;
                })
                .catch((err) => {

                })
        },
        getCategories(){
            let urlCategories = '/dashboard/categories';
            axios.get(urlCategories)
                .then((response) => {
                    this.categories = response.data;
                })
                .catch((err) => {

                })
        },
        createdEvent(){
            let urlEvent = '/dashboard/newEvent';
            const eventData = {
                'id'            : this.user.id,
                'title'         : this.title,
                'coin'          : this.coinvalue,
                'category'      : this.categoryvalue,
            }
            console.info(eventData);
            axios.post(urlEvent, eventData)
                .then((response) => {
                    console.info(ok);
                })
                .catch((err) => {
                    console.info(err.response.data);
                })
        }
 </script>

storeEvent (EventController)

 public function storeEvent(Request $request)
 {
      $this->validate($request, [
                'title'    => 'required|max:25',
                'coin'     => 'required',
                'category' => 'required',
        ]);

        $userAuth = Auth::user()->id;
        $userEvent = $request->id;
        if ($userAuth === $userEvent){
            $event = new Event;
            $event->user_id = $userEvent;
            $event->title = $request->title;   
            if ($event->save()){
                $event->coins()->attach($request->coin);
                $event->categories()->attach($request->category);
                return response()->json([
                        'status' => 'Muy bien!',
                        'msg' => 'Tu evento ya fue creado con éxito.',
                        ], 200);
            }
            else {
                return response()->json([
                            'status' => 'Error!',
                            'msg' => 'No pudimos crear tu evento.',
                        ], 401);
            }
       }
}

Я думаю, что проблема может заключаться в том, что я присваиваю значения разделам coin () -> attach () и category () -> attach (), но я не знаю, как решить эту проблему из-за моей неопытности в использовании инструмента.

Система была полностью сделана на Laravel и работала без проблем, теперь, когда она обновляется с помощью Vue, она начала доставлять неудобства.

Любые идеи? Я использую Laravel 5,6, Vuejs 2, Axios и Vue-multiselect 2

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
725
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

422 означает ошибку проверки, поэтому выполните console.info или проверьте элемент при вызове axios и убедитесь, что:

 'title'         : this.title,
 'coin'          : this.coinvalue,
 'category'      : this.categoryvalue,

Не пустые, потому что сейчас некоторые данные сверху отсутствуют, так как это исключение проверки 422.

данные от Axios отправляются хорошо, проблема в методе контроллера

Felipe 25.04.2018 21:59
Ответ принят как подходящий

Попробуйте отправить данные формы

Вот вам пример.

var urlEvent = '/dashboard/newEvent';

var form_data = new FormData();
form_data.append('id',this.user.id);
form_data.append('title',this.title);

for(let coin of this.coinvalue)
    form_data.append('coin[]', coin);

for(let category of this.categoryvalue)
    form_data.append('category[]', category);

axios(urlEvent,{
    method: "post",
    data: form_data
})
.then(res => {
    console.info(ok);
})
.catch(err => {
    console.info(err.response.data);
});

Если это по-прежнему дает вам код состояния 422 (Необработанные объекты). Затем попробуйте вернуть запрос $ в вашем контроллере. И проверьте, какие данные фактически отправляются контроллеру и какова ваша проверка.

Отлично, теперь моя проблема в том, как сохранить данные категории и монеты в таблицах, связанных с событием, у меня есть этот код в $ event-> coins () -> attach ($ request-> coin); $ event-> categories () -> attach ($ request-> category);

Felipe 26.04.2018 07:50

Если вы используете отношения "один ко многим". Вы можете просто сделать цикл, чтобы сохранить его. foreach($request->coin as $coin)

aj3sh 26.04.2018 07:56

Я использую отношение "многие ко многим" между событием и монетой и событием для категории.

Felipe 26.04.2018 07:59

Уверены ли вы. $request->coin - это идентификаторы, сохраненные в таблице монет. ?

aj3sh 26.04.2018 08:19

Я решил проблему, данные сохраняются в таблице Event и в промежуточных таблицах, проблема теперь в том, что при сохранении информации она возвращает мне ошибку ответа Uncaught (in promise) TypeError: Can not read property 'data' of undefined

Felipe 26.04.2018 09:01

Вам лучше задать другой вопрос. и отметьте его как решенное. : D

aj3sh 26.04.2018 09:08

Другие вопросы по теме