Laravel 11 Sail MongoDB Integration (PHP 8.3)
Laravel 11, PHP 8.3
You Can Review All The Changes Here
composer install —ignore-platform-reqs
npm install
./vendor/bin/sail up -d
Create a Laravel project. If you already have a Laravel project, skip this step.
composer global require laravel/installer
laravel new project-name
cd project-name
Install and configure Laravel Sail:
composer install
composer require mongodb/laravel-mongodb --ignore-platform-reqs
php artisan sail:install # choose MySQL during installation
.env
fileDB_CONNECTION=mongodb
DB_HOST=mongodb # docker service name
DB_PORT=27017
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
SESSION_DRIVER=file # use file or redis for session driver
docker-compose.yml
file# services:
# laravel.test:
# ...
depends_on:
- mongodb # replace mysql with mongodb
# services:
# ...
mongodb:
image: 'mongo:latest'
ports:
- '${DB_PORT}:${DB_PORT}'
volumes:
- 'sail-mongodb:/data/db'
environment:
MONGO_INITDB_ROOT_USERNAME: '${DB_USERNAME}'
MONGO_INITDB_ROOT_PASSWORD: '${DB_PASSWORD}'
networks:
- sail
# ...
# volumes:
sail-mongodb: # rename sail-mysql to sail-mongodb
driver: local
./vendor/bin/sail up -d
./vendor/bin/sail artisan sail:publish
./vendor/bin/sail stop
docker/8.3/Docker
file, add the following:# ...
# && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN yes '' | pecl install -f mongodb
# Uncomment if necessary
# RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
# ...
docker/8.3/php.ini
file, add the following:# ...
# pcov.directory = .
extension=mongodb.so
./vendor/bin/sail up -d --build
./vendor/bin/sail composer require mongodb/laravel-mongodb
./vendor/bin/sail php -m | grep mongodb
config/database.php
file:# 'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', 27017),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'database' => env('DB_DATABASE'),
],
./vendor/bin/sail artisan migrate
Update app/Models/User
to use MongoDB's Authenticatable class:
# use Illuminate\Foundation\Auth\User as Authenticatable;
use MongoDB\Laravel\Eloquent\Model as Authenticatable;
Read more about Eloquent Model Class here.
Start an interactive shell:
./vendor/bin/sail tinker
> User::create([ "name" => "Taylor Otwell", "email" => "[email protected]", "password" => "12345678" ])
= App\Models\User {#5874
name: "Taylor Otwell",
email: "[email protected]",
#password: "$2y$12$wtfLnviwEio3IPEwz0xeoekHktGrxyn7rrDRUzt3kO4iVFo0gS2YS",
updated_at: MongoDB\BSON\UTCDateTime {#6093
+"milliseconds": "1714745297192",
},
created_at: MongoDB\BSON\UTCDateTime {#6093},
_id: MongoDB\BSON\ObjectId {#6097
+"oid": "6634efd13dce5a120b0042f2",
},
}
> User::all()
= Illuminate\Database\Eloquent\Collection {#5153
all: [
App\Models\User {#5152
_id:
MongoDB\BSON\ObjectId {#6148
+"oid": "6634efd13dce5a120b0042f2",
},
name: "Taylor Otwell",
email: "[email protected]",
#password: "$2y$12$wtfLnviwEio3IPEwz0xeoekHktGrxyn7rrDRUzt3kO4iVFo0gS2YS",
updated_at: MongoDB\BSON\UTCDateTime {#5944
+"milliseconds": "1714745297192",
},
created_at: MongoDB\BSON\UTCDateTime {#5466
+"milliseconds": "1714745297192",
},
},
],
}