MongoDB в Laravel — это как пытаться засунуть квадратный колышек в круглое отверстие. Оно лезет, но с хрустом. Зачем вообще связываться? Потому что бывают проекты, где MySQL или Postgres начинают задыхаться: слишком много динамики, структуры пляшут, а данные больше похожи на помойку JSON-объектов, чем на нормальные таблицы.
И вот тут появляется MongoDB. Красиво? Нет. Полезно? Иногда.
Шаг 1. MongoDB, мать её
Сначала ставишь сам MongoDB. Да, руками. Да, с их официального сайта, а не через какой-то «шаманский установщик». Потом запускаешь демона и молишься, чтобы он не отвалился после ребута.
Шаг 2. Пакет на все случаи жизни
Без jenssegers/laravel-mongodb ты далеко не уедешь. Этот пакет — костыль, который прикручивает Mongo к Eloquent.
composer require jenssegers/mongodb
Именно он позволит тебе писать в стиле «User::find()» и делать вид, что у тебя всё ещё SQL. На деле — это просто синтаксический сахар над Mongo-запросами.
Шаг 3. Настройки в .env
Тут всё по классике:
DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
Проблемы начнутся, когда у тебя будет кластер или репликация, но это уже отдельный цирк с конями.
Шаг 4. Модель под коллекцию
Лепим модель:
php artisan make:model User
И в неё:
namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model;
class User extends Model
{
protected $connection = 'mongodb';
protected $collection = 'users';
protected $fillable = ['name', 'email', 'password'];
}
Звучит красиво, но помни: никакие foreign keys тебе тут не светят. Mongo живёт без отношений, и придётся или дублировать данные, или писать костыли на уровне кода.
Шаг 5. CRUD и прочая рутина
Создание пользователя выглядит привычно:
$user = new User;
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->password = bcrypt('password');
$user->save();
Работает. Но если у тебя привычка делать join через полпроекта, забудь. Здесь тебя ждёт ад ручных связок и агрегатов.
Шаг 6. Агрегации и прочие извращения
Да, where, orderBy и take работают. Но попробуй-ка в Mongo провернуть сложную аналитику. Тут без пайплайна агрегаций не обойтись, а Eloquent для этого выглядит, мягко говоря, как хромая лошадь.
$users = User::where('votes', '>', 100)
->orderBy('name', 'desc')
->take(10)
->get();
Красиво? На демо-проекте — да. В продакшене ты быстро поймёшь, что проще писать чистые Mongo-запросы руками, чем ломать мозг Eloquent-адаптеру.
Итог: Mongo — это не MySQL
Использовать MongoDB в Laravel можно. Иногда нужно. Но не строй иллюзий: это не магия и не «новый уровень гибкости». Это другая философия работы с данными, и Laravel тут не то чтобы сильно помогает.
Хочешь масштабируемости и свободы структуры? Готов ковыряться с агрегациями и забыть про нормальные связи? Тогда MongoDB тебе друг.
Хочешь, чтобы всё было просто и красиво? Тогда иди обратно к MySQL и не мучай себя.
0 комментариев