Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

この記事は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を利用するか単品で使うかよく考えて使用するといいでしょう。

ikyu
「こころに贅沢を」をコンセプトに一休.com、一休レストランなどのサービスを提供しています。
https://www.ikyu.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした