Laravel E-Commerce Project - Add Subcategory On Edit and Add Product Page
In this video, we will learn how to add a subcategory on the add and edit product pages.
Let's explore how to achieve this. First, switch to the project and open the AddProductComponent class file. Create a new property:
public $scategory_id;
Inside the addProduct method, add the following code:
if($this->scategory_id)
{
$product->subcategory_id = $this->scategory_id;
}
Inside the render method, fetch the subcategories according to the selected category:
public function render()
{
$categories = Category::all();
$scategories = Subcategory::where('category_id',$this->category_id)->get();
return view('livewire.admin.admin-add-product-component',['categories'=>$categories,'scategories'=>$scategories])->layout('layouts.base');
}
Go to the add-product-component.blade.php view file and add a select control for subcategories after the category select control:
<div class="form-group">
<label class="col-md-4 control-label">Sub Category</label>
<div class="col-md-4">
<select class="form-control" wire:model="scategory_id">
<option value="0">Select Category</option>
@foreach ($scategories as $scategory)
<option value="{{$scategory->id}}">{{$scategory->name}}</option>
@endforeach
</select>
@error('scategory_id') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
Go back to the AddProductComponent.php class file and create a new function:
public function changeSubcategory()
{
$this->scategory_id = 0;
}
Call this function on the change event in the category select control:
<div class="form-group">
<label class="col-md-4 control-label">Category</label>
<div class="col-md-4">
<select class="form-control" wire:model="category_id" wire:change="changeSubcategory">
<option value="">Select Category</option>
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
@error('category_id') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
Now, let's test the functionality. Switch to the browser and refresh the page. Add a new product by filling in the details, selecting a category, and setting a subcategory. Click submit and see the "product added" message.
Go to the shop page and click on the subcategory to see the newly created product.
Next, let's add a subcategory on the edit product page. Switch to the project and open the EditProduct component view file. Add a select control for subcategories:
<div class="form-group">
<label class="col-md-4 control-label">Sub Category</label>
<div class="col-md-4">
<select class="form-control" wire:model="scategory_id">
<option value="0">Select Category</option>
@foreach ($scategories as $scategory)
<option value="{{$scategory->id}}">{{$scategory->name}}</option>
@endforeach
</select>
@error('scategory_id') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
Go to the EditProduct component class file and create a new property:
public $scategory_id;
Inside the mount method, write the following code:
$this->scategory_id = $product->subcategory_id;
Inside the updateProduct method, add an if condition:
If($this->scategory_id)
{
$product->subcategory_id = $this->scategory_id;
}
Create a new function:
public function changeSubcategory()
{
$this->scategory_id = 0;
}
Call this function on the change event in the category select control:
<div class="form-group">
<label class="col-md-4 control-label">Category</label>
<div class="col-md-4">
<select class="form-control" wire:model="category_id" wire:change="changeSubcategory">
<option value="">Select Category</option>
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
@error('category_id') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
Inside the render method, fetch the subcategories according to the selected category:
public function render()
{
$categories = Category::all();
$scategories = Subcategory::where('category_id',$this->category_id)->get();
return view('livewire.admin.admin-edit-product-component',['categories'=>$categories,'scategories'=>$scategories])->layout('layouts.base');
}
Now, let's test the functionality. Switch to the browser and refresh the page. Edit any product, change the category, and set a subcategory. Click submit and see the "product has been updated" message.
Check the subcategory to see the updated product.
By following these steps, you can add a subcategory on the add and edit product pages.