19
Апр
2018

Как подружить фреймворк Laravel c MongoDb?

Как подружить фреймворк Laravel c MongoDb?

От автора: так сложилось, что современные тенденции веб-разработки направлены на тотальное усложнение интернет-проектов. Сейчас уже не встретить сайт, на котором представлены страницы с простой текстовой информацией. Вместо того мы наблюдаем сложнейшие интернет порталы, которые манипулируют огромнейшим количеством все возможной информации, как текстовой, так и мультимедийной. И я сейчас не говорю о визуальной составляющей и обилия всевозможных скриптов, которые выполняются на клиентской стороне.

скачать исходники

Все это приводит к тому, что помимо основного функционала, при разработке, довольно остро стоит вопрос быстродействия проекта, ведь современные фреймворки и CMS в виду своей тотальной универсальности довольно требовательны к серверу и не так уж и быстры.

Поэтому сейчас все чаще, мы с Вами, встречаем такие слова как оптимизация, кеширование и не реляционные базы данных или же No SQL. Причем последние по сравнению с реляционными базами данных работают несколько быстрее и обладают хорошей масштабируемостью. Поэтому в текущем уроке, мы с Вами поговорим о том, как же подружить один из лидирующих фреймворков в данное время Laravel, с ярким представителем баз NoSql – Mongo DB.

Кратко хотел бы отметить что MongoDB — документо-ориентированная система управления базами данных с открытым исходным кодом, не требующая описания схемы таблиц и как Вы уже догадались, относится она к NoSQL базам данных, а так же использует JSON-подобные документы и схему базы данных. Собственно, что касается теории, то в этом уроке мы будем заниматься только практикой и подробно останавливаться на основах по работе с СУБД MongoDB не будем, так как это не тема данного урока, да и для этого, нужен полноценный миникурс.

Итак, для работы, конечно же, нам потребуется установленная система управления базами данных. Я использую на локальном компьютере сборку OpenServer, а значит, указанная СУБД уже установлена и готова к работе. Так же нам понадобится установленный фреймворк Laravel и для наглядности я установил инструмент MongoDB Compass, который очень удобен для работы с MongoDb.

Как подружить фреймворк Laravel c MongoDb?

Фреймворк Laravel, из “коробки” не поддерживает работу с указанной базой данных, а значит, нам потребуется дополнительное расширение, благодаря которому, мы сможем работать с ней, используя стандартные средства фреймворка. Поэтому по ссылке, Вы как раз найдете подходящий пакет, а значит, используя консоль и находясь в папке фреймворка, вводим следующую команду для установки расширения:

composer require jenssegers/mongodb

Затем, в файл config/app.php, добавляем сервис провайдер, установленного расширения:

Jenssegers\Mongodb\MongodbServiceProvider::class,

Далее необходимо настроить подключение к базе данных, потому как по умолчанию используется mysql, поэтому в файл config/database.php, добавляем следующие строки кода:

'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => env('DB_HOST', 'localhost'),
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
        'database' => 'admin' // sets the authentication database required by mongo 3
    ]
],

И наконец, в файл локальной конфигурации .env, внесем следующие изменения.

DB_CONNECTION=mongodb
DB_HOST=localhost
DB_PORT=27017
DB_DATABASE=tlaravel
#DB_USERNAME=homestead
#DB_PASSWORD=secret

Теперь настройка полностью завершена, а значит для проверки, давайте применим доступные миграции, тем самым убедимся, что расширение успешно работает.

php artisan migrate

После выполнения команды, мы увидим, что в базе данных были созданы необходимые документы.

Как подружить фреймворк Laravel c MongoDb?

Собственно теперь мы можем работать с базой данных, используя привычные, нам методы по выборке и добавлению данных. Однако для этого все классы моделей, которые Вы используете, должны наследоваться от специального класса use Jenssegers\Mongodb\Eloquent\Model. К примеру, вот таким образом:

<?php
namespace App;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Article extends Eloquent
{
    //
    protected $collection = 'articles';
    protected $fillable = ['title','text'];
}

Так же обратите внимание, что в свойстве $collection, Вы можете определять документ, с которым будет работать конкретная модель. Теперь для начала, давайте добавим некоторую информацию в базу данных:

Article::create([
        				'title' => 'Hello',
        				'text' => 'world',
        				]);

Для выборки данных можем использовать одно из выражений:

$articles =  Article::all();	
$article =  Article::find('5a9c3278dc8c6c0ffc000d93');	
$articles =  Article::where('_id','5a9c3278dc8c6c0ffc000d93')->orWhere('_id','5a9c32abdc8c6c0ffc000d94')->get();

Точно так же как и в реляционных базах данных, Вы можете формировать связи между моделями, используя все те же методы:

<?php
namespace App;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Article extends Eloquent
{
    //
    protected $collection = 'articles';
    protected $fillable = ['title','text'];
    
    public function category()
    {
        return $this->belongsTo('App\Category');
    }
}

И точно так же для модели Category:

<?php

namespace App;

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Category extends Eloquent
{
    //
    protected $collection = 'category';
    protected $fillable = ['title'];
    public function articles()
    {
        return $this->hasMany('App\Article');
    }
}

Таким образом, можно создать одну категорию.

Category::create(
        				[
        				'title' => 'JS',
        				]

И добавить в нее одну статью, как связующий документ.

$article = new Article(['title' => 'A Game of Thrones','text'=>'hello']);
$category = Category::first();
$book = $category->articles()->save($article);

Ну и, конечно же, выбрать записи в зависимости от наличия связанных записей можно следующим образом:

$article = Article::whereHas('category')->get();
dump($article);

При этом результат будет следующим:

Как подружить фреймворк Laravel c MongoDb?

Вот собственно и все что я хотел сказать в этом уроке, поэтому если расширение и собственно база данных MongoDB Вас заинтересовала – практикуйтесь, набирайтесь опыта, так как это направление довольно перспективное. Всего Вам доброго и удачного кодирования!!!

Источник: https://webformyself.com/kak-podruzhit-frejmvork-laravel-c-mongodb/

Тебе может это понравится...

Добавить комментарий