Laravel Session – Moving From MySQL to MongoDB

Laravel With MongoDb

Create a fresh Laravel Installation.

composer create-project --prefer-dist laravel/laravel blog

Setup application key

php artisan key:generate

Run application in browser

php artisan serv

Follow this for installing MongoDB.

Install composer package in Laravel

composer require jenssegers/mongodb

Add this in config/app.php

Jenssegers\Mongodb\MongodbServiceProvider::class,
Jenssegers\Mongodb\Auth\PasswordResetServiceProvider::class,

Configuration

Add this in your .env

DB_MDB_CONNECTION=mongodb
DB_MDB_HOST=127.0.0.1
DB_MDB_PORT=27017
DB_MDB_DATABASE=mcart
DB_MDB_USERNAME=
DB_MDB_PASSWORD=

Modify your config/database.php. Full code given below

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_MDB_CONNECTION', 'mongodb'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ],
        'mongodb' => [
            'driver'   => 'mongodb',
            'host'     => env('DB_MDB_HOST', 'localhost'),
            'port'     => env('DB_MDB_PORT', 27017),
            'database' => env('DB_MDB_DATABASE'),
            'username' => env('DB_MDB_USERNAME'),
            'password' => env('DB_MDB_PASSWORD'),
            'options'  => [
                'database' => 'admin'
            ]
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer set of commands than a typical key-value systems
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

];

Install MongoDB PHP extension

sudo apt-get install php7.1-mongodb

Replace php7.1 with your version of PHP.

Create a Model

php artisan make:model Moloquent

Modify it as follows

<?php

namespace App;

use Jenssegers\Mongodb\Eloquent\Model;

/**
 * Base Model for monogodb
 */
class Moloquent extends Model
{
}

Delete all the migrations and create following migrations

php artisan make:migration create_users_index

Open users index migration and modify code as follows

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;

class CreateUsersIndex extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function ($collection) {
            $collection->index('user_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users', function ($collection) {
            $collection->dropIndex('user_id');
        });
    }
}

Create another migration:

php artisan make:migration create_password_resets_index

Add following code in it

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;

class CreatePasswordResetsIndex extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('password_resets', function($collection)
        {
            $collection->index('email');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('password_resets', function ($collection) {
            $collection->dropIndex('email');
        });
    }
}

Change code of User Model as follows

<?php

namespace App;

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Auth\Authenticatable as AuthenticableTrait;

class User extends Moloquent implements Authenticatable
{
    use Notifiable;
    use AuthenticableTrait;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Run Migration

php artisan migrate

Generate Laravel’s default auth

php artisan make:auth

Run the applicaton

php artisan serve

So you are ready with Laravel with MongoDB with User authentication working.

Laravel Beginners Session With MySQL and MongoDB

Laravel Beginners Session

Introduction

Hi this is my first post. I am going to talk about Laravel. In this multi part series I am going to develop an application for myself. You can follow along to get started.

Who am I?

I am professional Web developer and Blogger. I have different blogs and websites in Laravel. Some are live some are in development. When I get free time I do WordPress stuff.  I watch movies a lot. Enough talking about me. Lets get back to work.

What are we going to do?

In this post I am going to take you through all the steps to setup a Laravel application with MySQL as well as MongoDB. If you have any questions, feel free to post on comments or ask on my Facebook page. I will try to reply as much possible.

What is Laravel?

Before getting into coding, lets talk a bit about what is Laravel. Laravel is a PHP framework and most popular one at present. It’s based on MVC design pattern. It have many inbuilt functionality out of the box that keeps you away from re-inventing the wheel.

Lets Start

Time to do coding stuff. I am going to write all commands for Linux Ubuntu 16.04 as I am using same right now. If you don’t have one you can do on any platform it will be working with same commands on Windows, Linux and Mac. So, it really doesn’t matter, feel free to do it.

Installation

Go to composer, and download and install composer if you don’t have it on your system. If you find it tough to install composer, you can follow this awesome digital ocean guide.
Install Laravel by using composer in your web directory of Ubuntu, which is by default /var/www/html/. Run following command to install Laravel.

$ composer create-project --prefer-dist laravel/laravel blog

Here blog is project name. Change it to whatever you like. If you get permission error you should run this command as sudo. It will take a while and will download all the dependencies and files for Laravel. Once it’s done, change directory to the project directory

$ cd blog

Now you can run your application by typing:

$ php artisan serv

This will run your Laravel application. You can see it running in your browser by typing at http://localhost:8000

Congratulations! You have done the first step and you have a full Laravel application running on your system. In my next post I shall be talking about database connection with MySQL and MongoDB. Keep visiting. If you have questions, use below comment section.

If you like this post, do share it with your friends and team.