###Are You Saving It Or Retrieving It?
Nov 25, 2018
22
Level 6
How to save category in laravel 5.7 with vue.js
Using Laravel 5.7 with vuejs, I am trying to display parent_id from a MySQL categories table. I want to pass the name and get all it's child categories irrespective of the parent.
My blade
<form action="{{ route('categories.store') }}" method="post">
@csrf
<div class="form-group">
<label for="name">name:</label>
<input type="text" id="name" class="form-control" v-model="name">
</div>
<div class="form-group">
<label for="sub_category">category</label>
<select id="sub_category" v-model="parent_id" class="form-control">
<option data-display="main category" value="0">main category</option>
<option v-for="category in categories" :value="category.id">@{{ category.name }}</option>
</select>
</div>
<div class="form-group">
<button type="button" @click="addCategory()" class="btn btn-info">save</button>
</div>
</form>
web.php
Route::group(['namespace' => 'Admin', 'prefix' => 'admin'],function (){
$this->get('panel', 'PanelController@index')->name('panel.index');
$this->resource('categories', 'CategoryController');
});
My vue
require('./bootstrap');
window.Vue = require('vue');
Vue.component('example-component', require('./components/ExampleComponent.vue'));
const app = new Vue({
el: '#app',
data: {
name: "",
parent_id: "",
categories: [],
},
methods: {
addCategory: function () {
axios.post(route('categories.store'), {
name: this.name,
parent_id: this.parent_id,
}).then(response => {
this.categories.push({'name': response.data.name, 'id': response.data.id});
}, response => {
this.error = 1;
console.log('Errors');
});
}
}
});
CategoryController
public function store(Request $request)
{
$category = new Category();
$category->name = $request->name;
$category->parent_id = $request->parent_id;
if ($category->save()) {
return $category;
}
}
I get 404 error.
Level 44
Here's how you'd typically set all this up:
app.js
...
const files = require.context('./', true, /\.vue$/i)
files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key)))
const app = new Vue({
el: '#app'
});
...
/resources/js/components/Categories.vue
<template>
<div>
<div class="form-group">
<label for="name">name:</label>
<input type="text" id="name" class="form-control" v-model="name">
</div>
<div class="form-group">
<label for="sub_category">category</label>
<select id="sub_category" v-model="parent_id" class="form-control">
<option data-display="main category" value="0">main category</option>
<option v-for="category in categories" :value="category.id">@{{ category.name }}</option>
</select>
</div>
<div class="form-group">
<button type="button" @click="addCategory()" class="btn btn-info">save</button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
name: "",
parent_id: "",
categories: [],
}
},
methods: {
addCategory() {
const self = this;
axios.post('categories', {
name: self.name,
parent_id: self.parent_id,
}).then((response) => {
self.categories.push(response.data.category);
}).catch((response) => {
self.error = 1;
console.log('Errors');
});
}
},
}
</script>
some-view.blade.php
<div>
<categories></categories>
</div>
CategoryController.php
public function store(Request $request)
{
$category = Category::create($request->all());
if ($request->wantsJson()) {
return response()->json(['message' => 'Category Created', 'category' => $category], 200);
}
return redirect()->route('categories.show', $category->id);
}
1 like
Please or to participate in this conversation.






