search
LoginSignup
23
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Laravel Advent Calendar 2016 Day 9

posted at

LaravelのORM、Eloquentを単品で使用してみる

はじめに

この記事はLaravel Advent Calendar 2016の12月9日分です。

LaravelにはORMとして、Eloquentと言われるものが存在します。
今回は、そのEloquentをLaravel以外で使用する方法を記していきます。

初期設定

まず、EloquentのGithubリポジトリです。
https://github.com/illuminate/database

使用方法はすべてリポジトリに書いてありますので、今回はそれに沿って使ってみたいと思います。

まずは、インストールからです。
composer.jsonに以下を追記しましょう。

{
 "require": {
    "illuminate/database": "*"
  }
}

composer installを実行すると、Eloquent周りのファイルがvender配下に配置されます。

Eloquentを使用する前に、初期設定を行わなければいけません。
これをbootstrap.phpとして保存しておきましょう。

bootstrap.php
require_once 'vendor/autoload.php';

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'eloquent_test',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

$capsule->setAsGlobal();
$capsule->bootEloquent();

Githubのドキュメントの通りですね。
後はこのbootstrap.phpを読み込んで使用するだけです。

テーブル作成

Laravelでマイグレーションを行うのと同様のコードで実装できます。

require_once 'bootstrap.php';

use Illuminate\Database\Capsule\Manager as Capsule;

Capsule::schema()->create('users', function ($table) {
    $table->increments('id');
    $table->string('email');
    $table->timestamps();
});

実践

実際に使用する方法を記載していきます。
Eloquentではクエリービルダーを使用する方法とモデルを作成して使用する方法があると思いますが、これは単品で使用する時も同様です。

クエリ発行

クエリービルダーを使用する方法です。
コメントアウトしてある行とその下の行は同じ動きをするものです。

挿入

require_once 'bootstrap.php';

use Illuminate\Database\Capsule\Manager as Capsule;

//$result = Capsule::insert('insert into users VALUES (null, "test@example.com", null, null)');
$result = Capsule::table('users')->insert([
    'email' => 'test@example.com'
]);

選択

require_once 'bootstrap.php';

use Illuminate\Database\Capsule\Manager as Capsule;

//$result = Capsule::select('select * from users');
$result = Capsule::table('users')->select('*')->get()->toArray();

更新

require_once 'bootstrap.php';

use Illuminate\Database\Capsule\Manager as Capsule;

//$result = Capsule::update('update users set email = "change@example.com" where id = 1;');
$result = Capsule::table('users')
    ->where('id', 1)
    ->update(['email' => 'change@example.com']);

削除

require_once 'bootstrap.php';

use Illuminate\Database\Capsule\Manager as Capsule;

//$result = Capsule::delete('DELETE FROM users WHERE id = 6');
$result = Capsule::table('users')->delete(3);

モデル作成

もちろんモデルを作成して、各メソッドを呼び出すこともできます。

namespace Model;

use Illuminate\Database\Eloquent\Model as EloquentModel;

class User extends EloquentModel
{
    protected $fillable = ['email'];
}

挿入

require_once 'bootstrap.php';

use Model\User;

//$user = new User;
//$user->email = 'test@example.com';
//$user->save();

$user = User::create([
    'email' => 'test2@example.com'
]);

選択

require_once 'bootstrap.php';

use Model\User;

$userArray = User::find(1);

更新

require_once 'bootstrap.php';

use Model\User;

$user = User::find(1);
$user->update([
    'email' => 'change@example.com'
]);

削除

require_once 'bootstrap.php';

use Model\User;

User::find(2)->delete();

最後に

難点としては、artisanコマンド、Migrationを行えないことです。
Lumenを使用した場合、どちらも行うことができるので、Lumenを利用するか単品で使うかよく考えて使用するといいでしょう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
23
Help us understand the problem. What are the problem?