This laravel 9 tutorial help to create CRUD rest endpoint using Elastic Search. We’ll create a rest API for add a record, edit a record , list all records and delete a records from ES database.
Nowadays, web application/tools are created on two layers, one is UI – which are created on front-end technology react, angular etc and the other is back-end which is created on backend technology like nodejs, PHP, java etc.
I have created the front-end into reactjs and the backend API is created into Laravel 9. ElasticSearch is used as a database for this project. You can create a front-end into any technology as per your project requirements.
I have already shared tutorials How To Integrate ElasticSearch With Laravel 9. I am extending this tutorial and adding CRUD operation using rest api.
Let’s create a CRUD laravel API that will handle insert, update and delete elasticsearch operation. I have created ESController.php
and EsService.php
– This file will have all service methods that will communicate with ElasticSearch.
Open api.php
file and added below entry for CRUD Operation –
//all elasticsearch data Route::get('es/all', 'ESController@getAllData'); // get single data Route::get('es/{id}', 'ESController@getDataById'); //create a record Route::post('es/create', 'ESController@insertData'); //upadte a record Route::put('es/update/{id}', 'ESController@updateData'); delete a record Route::delete('es/{id}', 'ESController@deleteData');
I have created all rest endpoints.
Let’s open ESController.php
file and added getAllData()
method to get all record.
public function getAllData(Request $request) { $from = 0; $size = 200; $response = $this->es_service->all($from, $size); return $this->jsonpSuccess($response); }
We have passed constant from and size parameter to a service method, I have created all()
method into EsService.php
file.
public function all($from = 0, $size = 200) { $es = $this->es; $params['index'] = $this->index; $params['type'] = $this->type; $params['size'] = $size; $params['from'] = $from; try { $results = $es->search($params); $hits = $results['hits']; return $hits; } catch (\Exception $ex) { \Log::critical($ex); $this->apiError("ES - Unable to get Entries", 400); } }
We’ll create a method into the Controller file to insert a new record into the ES database. I already added an entry into api.php
file which is using POST HTTP request, we ll pass the required data into post payload.
Added below method into the ESController.php file –
public function insertData(Request $request) { $parameters = $request->json()->all(); if(isset($parameters['type']) && $parameters['type'] != '') { $response = $this->es_service->create($parameters); return $this->jsonpSuccess($response); } else { return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Data is not inserted!.'); } }
We have gotten all posted payloads data using $request->json()->all() method and send to the service create() method. Now added create() method into the service file.
public function create($input, $id = null) { $es = $this->es; $params['index'] = $this->index; $params['type'] = $this->type; $params['body'] = $input; try { $result = $es->index($params); return array("id" => $result['_id']); } catch (\Exception $ex) { \Log::critical($ex); return $this->apiError('ES - Unable to Create Entry', 400); } }
Let’s update a record in the elasticsearch database. We’ll create a method into the controller file that’ll call the service method to update the record into the database.
As per route entry, Created a PUT type HTTP request to update data, we will pass ES id into the rest endpoint and post data into the HTTP request body as a JSON format.
Let’s add the below method into the ESController.php
file –
public function updateData($id, Request $request) { $data = $request->json()->all(); if(isset($id) && $id != '') { $response = $this->es_service->update($id, $data); return $this->jsonpSuccess($response); } else { return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Pipeline request data is not updated!.'); } }
This method takes $id
– ES database id and payloads as parameter. We’ll create update()
method into service.
public function update($id, $input) { $es = $this->es; $params['index'] = $this->index; $params['type'] = $this->type; $params['id'] = $id; $params['body']['doc'] = $input; try { $retUpdate = $es->update($params); return array("id" => $retUpdate['_id']); } catch (\Exception $ex) { \Log::critical($ex); return $this->apiError('ES - Unable to Update Entry', 400); } }
We have gotten all posted payload data using $request->json()->all() method and send it to the service create()
method. Now added update()
method into the service file.
Now, I will delete a record from the ElasticSearch database. We’ll create a method into the controller file that’ll call the service method to delete record from the database.
Let’s create a PUT type HTTP request to delete data, We will pass ES id into the rest endpoint.
Let’s add the below method into the ESController.php
file –
public function deleteData($id) { if(isset($id) && $id != '') { $response = $this->self_serve_cmdb->deleteById($id); return $this->jsonpSuccess($response); } else { return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Pipeline request data is not deleted!.'); } }
This method takes $id
– ES database id and payloads as parameter. We will create update()
method into service.
/** * delete an entry by es * * @param string $id */ public function deleteById($id) { $es = $this->es; $params['index'] = $this->index; $params['type'] = $this->type; $params['id'] = $id; try { $retDelete = $es->delete($params); return array("id" => $retDelete['_id']); } catch (\Exception $ex) { \Log::critical($ex); return $this->apiError('ES - Unable to Delete Entry', 400); } }
I have ES id
as a parameter for delete a record using delete()
method.
We have learned ElasticSearch integration with laravel into first part of this tutorial, This tutorial helped to create CRUD operation for elastic-search using laravel 9. Created Rest API add a record, update a record and delete a record from elasticsearch using Laravel 9.
This tutorial helps integrate a PHP SDK with Laravel. We'll install aws-php-sdk into laravel application and access all aws services… Read More
in this quick PHP tutorial, We'll discuss php_eol with examples. PHP_EOL is a predefined constant in PHP and represents an… Read More
This Laravel tutorial helps to understand table Relationships using Elequonte ORM. We'll explore laravel table Relationships usage and best practices… Read More
We'll explore different join methods of Laravel eloquent with examples. The join helps to fetch the data from multiple database… Read More
in this Laravel tutorial, We'll explore valet, which is a development environment for macOS minimalists. It's a lightweight Laravel development… Read More
I'll go through how to use soft delete in Laravel 10 in this post. The soft deletes are a method… Read More