Я пытаюсь сохранить данные, которые отправляю из окна просмотра событий. в методе 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






422 означает ошибку проверки, поэтому выполните console.info или проверьте элемент при вызове axios и убедитесь, что:
'title' : this.title,
'coin' : this.coinvalue,
'category' : this.categoryvalue,
Не пустые, потому что сейчас некоторые данные сверху отсутствуют, так как это исключение проверки 422.
Попробуйте отправить данные формы
Вот вам пример.
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);
Если вы используете отношения "один ко многим". Вы можете просто сделать цикл, чтобы сохранить его. foreach($request->coin as $coin)
Я использую отношение "многие ко многим" между событием и монетой и событием для категории.
Уверены ли вы. $request->coin - это идентификаторы, сохраненные в таблице монет. ?
Я решил проблему, данные сохраняются в таблице Event и в промежуточных таблицах, проблема теперь в том, что при сохранении информации она возвращает мне ошибку ответа Uncaught (in promise) TypeError: Can not read property 'data' of undefined
Вам лучше задать другой вопрос. и отметьте его как решенное. : D
данные от Axios отправляются хорошо, проблема в методе контроллера