Setting Up MySQL and MongoDB Together in Laravel 12
Sometimes you need relational data for parts of your app (MySQL) and flexible document storage for others (MongoDB). Here's how to set up both in Laravel 12. Install MongoDB PHP Extension sudo apt install ext-mongodb Install Required Composer Packages sudo composer require mongodb/mongodb sudo composer require mongodb/laravel-mongodb:^5.2 --with-all-dependencies .env example DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE= DB_USERNAME= DB_PASSWORD= MONGODB_USERNAME= MONGODB_PASSWORD= MONGODB_SERVER=127.0.0.1 MONGODB_PORT=27017 MONGODB_DATABASE= MONGODB_URI="mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@${MONGODB_SERVER}:${MONGODB_PORT}/${MONGODB_DATABASE}?directConnection=true&serverSelectionTimeoutMS=2000&authSource=admin&appName=mongosh+2.2.2?tls=false&authSource=admin" config/database.php use Illuminate\Support\Str; return [ 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => env('DB_CHARSET', 'utf8mb4'), 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => env('MONGODB_URI', 'mongodb://'.env('MONGODB_USERNAME').':'.env('MONGODB_PASSWORD').'@'.env('MONGODB_SERVER').':'.env('MONGODB_PORT').'/'.env('MONGODB_DATABASE').'?directConnection=true&serverSelectionTimeoutMS=2000&authSource=admin&appName=mongosh+2.2.2?tls=false&authSource=admin'), 'database' => env('MONGODB_DATABASE'), ], ], ]; Model examples MySQL Model (User)

Sometimes you need relational data for parts of your app (MySQL) and flexible document storage for others (MongoDB). Here's how to set up both in Laravel 12.
Install MongoDB PHP Extension
sudo apt install ext-mongodb
Install Required Composer Packages
sudo composer require mongodb/mongodb
sudo composer require mongodb/laravel-mongodb:^5.2 --with-all-dependencies
.env
example
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
MONGODB_USERNAME=
MONGODB_PASSWORD=
MONGODB_SERVER=127.0.0.1
MONGODB_PORT=27017
MONGODB_DATABASE=
MONGODB_URI="mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@${MONGODB_SERVER}:${MONGODB_PORT}/${MONGODB_DATABASE}?directConnection=true&serverSelectionTimeoutMS=2000&authSource=admin&appName=mongosh+2.2.2?tls=false&authSource=admin"
config/database.php
use Illuminate\Support\Str;
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('MONGODB_URI', 'mongodb://'.env('MONGODB_USERNAME').':'.env('MONGODB_PASSWORD').'@'.env('MONGODB_SERVER').':'.env('MONGODB_PORT').'/'.env('MONGODB_DATABASE').'?directConnection=true&serverSelectionTimeoutMS=2000&authSource=admin&appName=mongosh+2.2.2?tls=false&authSource=admin'),
'database' => env('MONGODB_DATABASE'),
],
],
];
Model examples
MySQL Model (User
)
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $connection = 'mysql';
protected $fillable = [
'name', 'email',
];
}
MongoDB Model (Post
)
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Post extends Model
{
protected $connection = 'mongodb';
protected $collection = 'posts';
protected $fillable = [
'title',
'body',
'slug',
];
}
Example Controller
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Post;
class ExampleController extends Controller
{
public function store(Request $request)
{
$user = User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
]);
$post = Post::create([
'title' => 'MongoDB Example',
'body' => 'This is stored in MongoDB.',
'slug' => 'mongodb-example',
]);
return response()->json([
'user' => $user,
'post' => $post,
]);
}
}
That's it. You now have MySQL and MongoDB both fully working in a Laravel 12 app.