Laravel入門トップページ


目次

  1. Composerのダウンロードとインストール
  2. コメント掲示板を作成してみよう
  3. リレーションシップを使いこなそう
  4. ユーザ認証の機能を実現しよう
  5. マルチ認証の機能を実現しよう
  6. MongoDB に接続しよう
    1. 概要と MongoDB の準備
    2. Laravel から MongoDB へ接続する
    3. Laravel での MongoDB マイグレーション
  7. キューを利用しよう
  8. コマンド(コンソール)を利用しよう
  9. 本番環境にデプロイしよう

MongoDB に接続しよう

Laravel から MongoDB へ接続する

目次に戻る

プロジェクトの作成

まずは,Laravel のプロジェクトを作成する.

[vagrant@localhost laravel]$ pwd ⏎
/home/vagrant/Documents/laravel
[vagrant@localhost laravel]$ ls ⏎
composer.phar
[vagrant@localhost laravel]$ php composer.phar create-project --prefer-dist laravel/laravel Laravel5.8-MongoDB-Connection ⏎
Installing laravel/laravel (v5.8.35)
- Installing laravel/laravel (v5.8.35): Downloading (100%)
Created project in connect-mongodb
...(中略)...
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.
[vagrant@localhost laravel]$

目次に戻る

プロジェクトの初期設定

プロジェクトの初期設定を行う.まずは,.env ファイルを編集して,バックエンドのデータベースを sqlite にしておく(後で MongoDB に変更する).

.env (抜粋)
DB_CONNECTION=sqlite
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

次に,config/app.php でタイムゾーンと言語の設定を行う.

config/app.php (抜粋)
    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'Asia/Tokyo',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    'locale' => 'ja',

SQLite のデータベースファイルも作成しておく.このデータベースを利用することはないが,ここで作成しておかなければ,後の作業でエラーとなる可能性が高い.

[vagrant@localhost Laravel5.8-MongoDB-Connection]$ touch database/database.sqlite ⏎
[vagrant@localhost Laravel5.8-MongoDB-Connection]$

ここで,Web サーバを起動して,Web ブラウザから Laravel トップページにアクセスできることを確認しておこう.

目次に戻る

Jenssegers/Mongodb パッケージのインストールと設定

Laravel から MongoDB にアクセスするためには,Jenssegers/Mongodb パッケージをインストールしなければならない.このために,次のコマンドを実行する.

[vagrant@localhost Laravel5.8-MongoDB-Connection]$ php ../composer.phar require jenssegers/mongodb ⏎
Using version ^3.6 for jenssegers/mongodb
./composer.json has been updated
...(中略)...
Package manifest generated successfully.
[vagrant@localhost Laravel5.8-MongoDB-Connection]$

Jenssegers/Mongodb パッケージがインストールできたら,.env に設定情報を記述する.具体的には,データベースの接続情報を sqlite から mongodb に変更し,mongodb のデータベース名,ユーザ名,パスワードなどを設定する.

.env (抜粋)
# DB_CONNECTION=sqlite
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=keijidb
DB_USERNAME=root
DB_PASSWORD=hogehoge
DB_AUTHENTICATION_DATABASE=admin

さらに,config/database.php と config/app.php を編集する.

config/database.php (抜粋)
    'connections' => [

        ・・・(中略)...

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

        'mongodb' => [
            'driver' => 'mongodb',
            'host' => env('DB_HOST'),
            'port' => env('DB_PORT'),
            'database' => env('DB_DATABASE'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'options' => [
                'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'),
            ],
        ],

    ],
config/app.php (抜粋)
    'providers' => [

        /*
         * Laravel Framework Service Providers...
         */

        ...(中略)...

        /*
         * Package Service Providers...
         */
        Jenssegers\Mongodb\MongodbServiceProvider::class,

        /*
         * Application Service Providers...
         */

        ...(中略)...

    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => [

        ...(中略)...

        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,

        'Moloquent' => Jenssegers\Mongodb\Eloquent\Model::class,
    ],

];

目次に戻る

Comment モデルの作成

Comment モデルを作成して,データベースのコレクション名(テーブル名のイメージ)を指定する.まず,Comment モデルを作成する.

[vagrant@localhost Laravel5.8-MongoDB-Connection]$ php artisan make:model Comment ⏎
Model created successfully.
[vagrant@localhost Laravel5.8-MongoDB-Connection]$

次に,作成された app/Comment.php へモデルに関連付けるコレクション名を指定する.例によって,モデルは単数形で,コレクション名は複数形で記述することに注意しよう.

app/Comment.php
<?php

namespace App;

// use Illuminate\Database\Eloquent\Model;  // ここをコメントアウトする
use Jenssegers\Mongodb\Eloquent\Model as Moloquent;

class Comment extends Moloquent
{
  // データベースのコレクション名を指定する
  // (RDM のテーブル名のようなイメージ)
  protected $collection = 'comments';
}

目次に戻る

ルートの記述

「/comments」という URL にアクセスしたときに,comments の一覧を表示したいので,そのルートを記述する.

routes/web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/comments', 'CommentsController@index');

目次に戻る

コントローラの作成

モデルとルートの設定ができたので,最後にコントローラを作成して,実際に MongoDB からデータを取り出してみよう.まず,CommentsController を作成する.

[vagrant@localhost Laravel5.8-MongoDB-Connection]$ php artisan make:controller CommentsController ⏎
Controller created successfully.
[vagrant@localhost Laravel5.8-MongoDB-Connection]$

上のコマンドで app/Http/Controllers/CommentsController.php が生成されたので,このファイルに index 関数を追加する.

app/Http/Controllers/CommentsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Comment;

class CommentsController extends Controller
{
  public function index()
  {
    $comments = Comment::get();
    dd($comments);
  }
}

ここまでできれば,Webサーバを起動してブラウザからアクセスしてみよう.MongoDB に登録した comments コレクションの一覧を正しく取得できていることが確認できる.

mongodb-1

データベースのマイグレーションに関する部分を除いて,その後の作成は SQLite を使った場合と同様の方法で可能です.

目次に戻る