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

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

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

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

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

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

Фреймворк Laravel. Быстрая разработка с фреймворком №1

Узнай тонкости современной веб-разработки с помощью фреймворка Laravel

Узнать подробнее

Кратко хотел бы отметить что 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 

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

Фреймворк Laravel. Быстрая разработка с фреймворком №1

Узнай тонкости современной веб-разработки с помощью фреймворка Laravel

Узнать подробнее
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 Вас заинтересовала – практикуйтесь, набирайтесь опыта, так как это направление довольно перспективное. Всего Вам доброго и удачного кодирования!!!

Фреймворк Laravel. Быстрая разработка с фреймворком №1

Узнай тонкости современной веб-разработки с помощью фреймворка Laravel

Узнать подробнее

Фреймворк Laravel. Быстрая разработка с фреймворком №1

Узнай тонкости современной веб-разработки с помощью фреймворка Laravel

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree