読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

Illuminate DatabaseのEloquent ORMを使う

PHP 勉強メモ

Illuminate Databaseは、SQLで操作することができますが、Eloquent ORM(Objecte-Relational Model)というオブジェクト操作になぞらえた操作もできます。

Illuminate Databaseをインストールして、データの挿入、取り出しを行う例を示します。データベースエンジンはMySQLを利用しますが、Illuminate Databaseは、PostgresやSQL Serverなどにも対応しています。

インストール

  • 利用するプロジェクトフォルダー内で、composerを使ってインストールする
composer require illuminate/database

データベースの準備

事前に、利用するデータベースを作成しておきます。

mysql -u データベースを作成できるユーザー名 -p
  • パスワードを入力してMySQLを起動
  • データベースを作成。以下は test_eloquentorm というデータベースを作成する例
CREATE DATABASE IF NOT EXISTS test_eloquentorm CHARACTER SET=utf8;
  • 操作するユーザーを特定のユーザーに割り当てる場合、権限を与える。eloquent_userが操作する場合は以下の通り
GRANT SELECT,DELETE,INSERT,UPDATE,CREATE ON test_eloquentorm.* TO 'eloquent_user'@'localhost';

データベースの操作

Eloquent ORMを使って、以下を行うコードを示します。

  • データベースに接続
  • テーブル'users'がなければ作成
  • ユーザーを追加
  • 全てのデータを取り出して、名前と作成日時を出力
  • ex.php を作成して、以下のコードを書く
<?php
// 必要なクラスを自動的に読み込む
require __DIR__ . '/vendor/autoload.php';

// 必要なクラスを宣言
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Eloquent\Model as Eloquent;

// 操作したいテーブルに対して、Eloquentクラスを継承したクラスを定義
// デフォルトでは、クラス名を小文字にして複数形にしたテーブル名を自動的に参照。以下の例ではusers
class User extends Eloquent{};

// Illuminate Databaseを設定
$capsule = new Capsule;
// データベースに接続
$capsule->addConnection([
    'driver' => 'mysql',
    'host' => 'localhost',
    'database' => 'test_eloquentorm',
    'username' => '',                           // ユーザー名
    'password' => '',                            // パスワード
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => ''
]);

// Illuminate DatabaseのインスタンスをCapsuleでアクセス可能にする
$capsule->setAsGlobal();
// Eloquent ORMを起動
$capsule->bootEloquent();

// スキーマのインスタンスを取得
$schema = $capsule->schema();
// テーブル users がないかを確認
if (!$schema->hasTable('users')) {
    // なければテーブルの作成
    // カラムの指定方法は http://readouble.com/laravel/5/0/dev/ja/schema.html
    $schema->create('users', function($table) {
        $table->increments('id');
        $table->string('name', 100);
        $table->timestamps();
    });
}

// 名前 という名前で新規ユーザーを追加
$user = new User;
$user->name = "名前";
$user->save();

// データを取り出す
$lists = User::all();
foreach($lists as $user) {
    echo $user->name.":".$user->created_at."\n";
}
?>


以上です。各コードの説明は参照URLを参照してください。

事前に作成したテーブルを利用するには

例えば、事前に'custom_table'という名前でテーブルを作成していた場合は、以下のように、モデルクラスの$tableプロパティにテーブル名を設定します。

class User extends Eloquent {
    protected $table = 'custom_table';
}

参考URL