Step by Step How To Create Laravel MongoDB CRUD
Step by Step How To Create Laravel MongoDB CRUD – Brillian Solution. Still, go to its Github, If You need further information about the Jessegers package. MongoDB is an open- source,cross-platform, document- acquainted NoSQL database for high- volume data storehouse. MongoDB is written in C. But, first, let’s figure our whole blog post.
NoSQL( MongoDB) seems relatively unpopular on Laravel, not because no bone cares, but because not numerous people will use Mongo over SQL since SQL is formerly bedded into Laravel and provides an excellent experience for beginners to understand how Laravel works with databases.
Contents
Eloquent ORM for NoSQL
It might be more packages that handle NoSQL, but we must trust further when it’s grounded on the community. I’ve also run it in product for quite a while, and so far, I’ve noway encountered problems.
The setup is enough straightforward if you read the attestation it’ll help you install it through musician and set up a database motorist. After that, we ’ll focus just on the essential effects.
This package offers a Moloquent model, as the attestation countries. It’s an Eloquent model but made for Mongo.
Step by Step How To Create Laravel MongoDB CRUD
To use Laravel with MongoDB, use the jenssegers/mongodb package.
- Step 1: Configure the Mongodb database in Windows.
- Step 2: Install and configure Laravel.
- Step 3: Install and configure the MongoDB package for Laravel.
- Step 4: Create a model, route, controller, and view file.
- Step 5: From the view file, fill in the input details and send the POST request to the Laravel server, saving the data into the MongoDB database.
- Step 6: Display the data in the front using the Laravel view.
- Step 7: Create an edit form and update the data in the database.
- Step 8: Write the logic to delete the data from the database inside the controller file.
Configure the Mongodb database in Windows
Still, you might face one issue, the PHP MongoDB motorist, If you’re connecting the MongoDB database to Laravel or any PHP operation.
The package we will install in Laravel requires the php mongodb motorist installed on our machine. But if you try to download a direct package without installing the motorist, you’ll face an error that says you have one extension missing in your PHP extension lines or other crimes depending on your configured terrain.
It’s the most critical issue in this script. Luckily I’ve the stylish possible result for you. So I’ll help you connect your Laravel operation to the MongoDB database. So first, you need to go to this Link. I’m assuming that you’re using Windows.
https//pecl.php.net/package/mongodb/1.3.0/windows
Now, I’m using Windows 10 32Bit zilches, and my PHP interpretation is7.1. So you’ll choose the download train grounded on your machine configuration.

Download the DLL Zip file and extract it inside your PHP’s ext directory. That ext directory contains many DLL extension files already.
I am using XAMPP, so your directory path to the ext is C:\xampp\php\ext. The DLL file name of the MongoDB driver is php_mongodb.dll. So make sure that this file is installed correctly in the ext directory.
Now, open the php.ini file and add the following line. If the line is already there, then check if it is commented or not; if commented, then remove the semicolon to uncomment. To work with MongoDB, this driver needs to be bootstrapped at the start of the server.
extension=php_mongodb.dll
Save that file.
Please restart the server. It is essential; otherwise, our changes will not reflect.
Now, you can connect your PHP application to the MongoDB database. In our case, it is the Laravel MongoDB connection. Then, we will be ready to start our Laravel MongoDB CRUD Tutorial With an Example.
Laravel MongoDB CRUD
To create a crud application in Laravel with MongoDB, use the Authenticatable model. The User model extends an Authenticatable model. One of the big problems that I have encountered with MongoDB was when it was about the User. Unfortunately, MongoDB does not support the default model that Laravel offers, so we’ll have to use the one that comes with the package:
use Jenssegers\Mongodb\Auth\User as Authenticatable;
class User extends Authenticatable
{
//
}
If you want to use Laravel Passport with MongoDB, make sure you use the designmynight/laravel-mongodb-passport. It will provide you with another Authenticatable class that will do the job for you!
Step 1: Install Laravel Project
Download New Laravel Project by writing the following command.
composer create-project --prefer-dist laravel/laravel laravelmongodb
Step 2: Configure MongoDB Database
So now, let’s configure the MongoDB Database in our laravel application. So open the .env file and add the following detail.
//.env
MONGO_DB_HOST=127.0.0.1
MONGO_DB_PORT=27017
MONGO_DB_DATABASE=mongocrud
MONGO_DB_USERNAME=
MONGO_DB_PASSWORD=
Next, we want to add a new mongodb connection on config >> database.php file.
//database.php
'connections' => [
...
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_DB_HOST', 'localhost'),
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => []
],
]
Step 3: Install Laravel MongoDB Package
Now we will install the jenssegers/mongodb Package in our project.
composer require jenssegers/mongodb
Step 4: Define providers.
Find the providers in the config >> app.php file and register the MongodbServiceProvider.
'providers' => [
Jenssegers\Mongodb\MongodbServiceProvider::class,
]
Step 5: Create a model
Type the following command in your terminal.
php artisan make:model Car
It will create a Car.php file.
The package includes a MongoDB-enabled Eloquent class that you can use to establish models for corresponding collections. Add the code in the Car.php file.
//Car.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class Car extends Eloquent
{
protected $connection = 'mongodb';
protected $collection = 'cars';
protected $fillable = [
'carcompany', 'model','price'
];
}
SQL works with tables, and NoSQL works with collections. So instead of the $table variable, we’ll have a $collection variable.
Also, it’s essential to note that the primary key cannot be set through $primaryKey, and the $incrementing is unavailable.
Additionally, you might want to specify that the model belongs to the mongodb connection you created earlier.
You must be at peace that MongoDB auto-assigns primary keys to documents (the equivalent of rows from SQL). So, to access the primary key of a document, you have to use the same attribute name as in the basic model.
echo 'The Car ID is: '. $car->_id;
echo 'The Car ID is '. $car->id; // they both work
Using find() uses the primary key field to retrieve the result.
There are almost no schemas to define
In NoSQL, we don’t have schemas to define. So we can go as crazy as we want. But we can take advantage of the migrations to define indexes, unique fields, and other mongo-specific fields.
See the following code.
Schema::create('cars', function ($collection) {
$collection->index('slug');
$collection->unique('slug');
});
The migration process is the same. To run the migrations, ensure that the default driver set (the DB_CONNECTION env variable) is set to mongodb.
php artisan migrate
In case you want to run both SQL and NoSQL in the same project, I can give you some hints:
- Move your SQL migrations to a folder inside the migrations folder. I’ll call it MySQL.
- All models that work with the default database driver should extend the right model.
Running migrations should be done for either local or production for the default driver (i.e., when DB_CONNECTION is set to mongodb).
For MySQL driver,
php artisan migrate --database=mysql --path=database/migrations/mysql/
So, as long as NoSQL is schemaless, we can define it while working with data. In MongoDB, we’re able to drop fields whenever we want.
So, if we want to drop some fields, we can do it using the drop method.
$ppl = Employee::where('name', 'TrevorNoah')->first();
$ppl->drop('field1');
// or
$john->drop(['field1', 'field2']); // works with more
Now, let’s create a view file.
Step 6: Create a view file
Create a file in resources >> views >> carcreate.blade.php and put the following code.
<!-- carcreate.blade.php -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Laravel MongoDB CRUD Tutorial With Example</title>
<link rel="stylesheet" href="{{asset('css/app.css')}}">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Laravel MongoDB CRUD Tutorial With Example</h2><br/>
<div class="container">
</div>
<form method="post" action="{{url('add')}}">
@csrf
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Carcompany">Car Company:</label>
<input type="text" class="form-control" name="carcompany">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Model">Model:</label>
<input type="text" class="form-control" name="model">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Price">Price:</label>
<input type="text" class="form-control" name="price">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
</body>
</html>
Step 7: Create one controller and route
php artisan make:controller CarController
It will create a controller file called CarController.php.
We register routes in routes >> web.php file. So let us do it.
//web.php
Route::get('add','CarController@create');
Route::post('add','CarController@store');
Route::get('car','CarController@index');
Route::get('edit/{id}','CarController@edit');
Route::post('edit/{id}','CarController@update');
Route::delete('{id}','CarController@destroy');
Add code to create() function to display view.
//CarController.php
public function create()
{
return view('carcreate');
}
Step 8: Save Data into MongoDB Database
We need to code the store function to save the data in the database.
//CarController.php
use App\Car;
public function store(Request $request)
{
$car = new Car();
$car->carcompany = $request->get('carcompany');
$car->model = $request->get('model');
$car->price = $request->get('price');
$car->save();
return redirect('car')->with('success', 'Car has been successfully added');
}
Step 9: Make an index page to list the car information.
For that frontend, we need to send the data to the carindex.blade.php. So, in the CarController.php file, we need to write the code to get the data and return it to the index view.
//PostController.php
public function index()
{
$cars=Car::all();
return view('carindex',compact('cars'));
}
In resources,>> views, create a different blade file called carindex.blade.php and place the following code in it.
<!-- carindex.blade.php -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Index Page</title>
<link rel="stylesheet" href="{{asset('css/app.css')}}">
</head>
<body>
<div class="container">
<br />
@if (\Session::has('success'))
<div class="alert alert-success">
<p>{{ \Session::get('success') }}</p>
</div><br />
@endif
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Company</th>
<th>Model</th>
<th>Price</th>
<th colspan="2">Action</th>
</tr>
</thead>
<tbody>
@foreach($cars as $car)
<tr>
<td>{{$car->id}}</td>
<td>{{$car->carcompany}}</td>
<td>{{$car->model}}</td>
<td>{{$car->price}}</td>
<td><a href="{{action('CarController@edit', $car->id)}}" class="btn btn-warning">Edit</a></td>
<td>
<form action="{{action('CarController@destroy', $car->id)}}" method="post">
@csrf
<input name="_method" type="hidden" value="DELETE">
<button class="btn btn-danger" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
So, if you type the URL: http://localhost:8000/car, you can see the page like the below image.
Step 10: Build an edit view for updating the Car Information
The next step will be to call the edit function in the CarController.php file and add the following code.
public function edit($id)
{
$car = Car::find($id);
return view('caredit',compact('car','id'));
}
Now, make a caredit.blade.php file inside the resources >> views folder.
<!-- caredit.blade.php -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Laravel MongoDB CRUD Tutorial With Example</title>
<link rel="stylesheet" href="{{asset('css/app.css')}}">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Edit A Form</h2><br/>
<div class="container">
</div>
<form method="post" action="{{action('CarController@update', $id)}}">
@csrf
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Carcompany">Car Company:</label>
<input type="text" class="form-control" name="carcompany" value="{{$car->carcompany}}">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Model">Model:</label>
<input type="text" class="form-control" name="model" value="{{$car->model}}">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Price">Price:</label>
<input type="text" class="form-control" name="price" value="{{$car->price}}">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<button type="submit" class="btn btn-success">Update</button>
</div>
</div>
</form>
</div>
</body>
</html>
The next move will be adding some code to the update() function.
//CarController.php
public function update(Request $request, $id)
{
$car= Car::find($id);
$car->carcompany = $request->get('carcompany');
$car->model = $request->get('model');
$car->price = $request->get('price');
$car->save();
return redirect('car')->with('success', 'Car has been successfully update');
}
Step 11: Delete the Car Information
//CarController.php
public function destroy($id)
{
$car = Car::find($id);
$car->delete();
return redirect('car')->with('success','Car has been deleted');
}
The final Code of CarController.php looks like the below code.
//CarController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Car;
class CarController extends Controller
{
public function create()
{
return view('carcreate');
}
public function store(Request $request)
{
$car=new Car();
$car->carcompany = $request->get('carcompany');
$car->model = $request->get('model');
$car->price = $request->get('price');
$car->save();
return redirect('car')->with('success', 'Car has been successfully added');
}
public function index()
{
$cars=Car::all();
return view('carindex',compact('cars'));
}
public function edit($id)
{
$car = Car::find($id);
return view('caredit',compact('car','id'));
}
public function update(Request $request, $id)
{
$car= Car::find($id);
$car->carcompany = $request->get('carcompany');
$car->model = $request->get('model');
$car->price = $request->get('price');
$car->save();
return redirect('car')->with('success', 'Car has been successfully update');
}
public function destroy($id)
{
$car = Car::find($id);
$car->delete();
return redirect('car')->with('success','Car has been deleted');
}
}
Finally, Our Laravel MongoDB CRUD Tutorial With Example is over.
Advantages of MongoDB
Even for high-traffic apps, MongoDB is fast and reliable. On average, it consumes around 4 GB of RAM with about 600 million document reads, writes, and deletes in an entire month, with an average of 600 writes and reads, combined, per second.
I don’t recommend using it for caching — whenever you want to cache, remember to use memory over disk because it provides less friction and faster access and writing.