Laravel 4.2 データベースの基本的な使用法

設定

Laravelはデータベースとの接続、クエリーの実行をとても簡単にしてくれます。データベース設定ファイルはapp/config/database.phpです。このファイルで使用するデータベース接続を全部定義すると同時に、デフォルトで使用する接続も指定してください。サポートしている全データベースシステムの例はファイルの中にあります。

現在LaravelがサポートしてるデータベースシステムはMySQL、Postgres、SQLite、SQL Serverです。

Read/Write接続

場合により、SELECT文には別のデータベース接続を利用したい場合もあると思います。INSERT、UPDATE、DELETE文では、また他の接続に切り替えたい場合です。Laravelではこれは簡単に実現できます。SQLをそのまま使う場合であろうと、クエリービルダーやEloquent ORMを利用する場合であろうと、適切な接続が利用されます。

Read/Write接続を理解してもらうため、以下の例をご覧ください。

'mysql' => array(
    'read' => array(
        'host' => '192.168.1.1',
    ),
    'write' => array(
        'host' => '196.168.1.2'
    ),
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

設定配列にreadwrite、2つのキーが追加されたことに注目して下さい。2つのキーともhostというキーを一つ持っています。readwrite接続時の残りのデータベースオプションは、メインのmysql配列からマージされます。ですから、readwriteの配列には、メインの配列の値をオーバーライドしたいものだけ指定してください。この場合、192.168.1.1は"read"接続に利用され、一方192.168.1.2が"write"接続に利用されます。メインのmysql配列に含まれる、データベース接続情報、プレフィックス、キャラクターセットなどその他のオプションは、両方の接続で共有されます。

クエリーの実行

一度データベース接続の設定を済ませれば、DBクラスを使用しクエリーを実行できます。

SELECTクエリーを実行する

$results = DB::select('select * from users where id = ?', array(1));

selectメソッドはいつも結果を配列でリターンします。

INSERT文を実行する

DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));

UPDATE文を実行する

DB::update('update users set votes = 100 where name = ?', array('John'));

DELETE文を実行する

DB::delete('delete from users');

注目:updatedelete文はその操作により影響を受けるレコード数をリターンします。

通常のSQL文を実行する

DB::statement('drop table users');

クエリーイベントをリッスンする

DB::listenメソッドを使用し、クエリーイベントをリッスンすることが可能です。

DB::listen(function($sql, $bindings, $time)
{
    //
});

データベーストランザクション

データベーストランザクションを使用して一連の操作を実行する場合は、transactionメソッドを使ってください。

DB::transaction(function()
{
    DB::table('users')->update(array('votes' => 1));

    DB::table('posts')->delete();
});

注意:transactionのクロージャーの中で、どんな例外が投げられても、自動的にそのトランザクションはロールバックされます。

場合により、自分でトランザクションを始める必要があることもあるでしょう。

DB::beginTransaction();

トランザクションをロールバックするには、rollbackメソッドを使用します。

DB::rollback();

最後に、トランザクションのコミットは、commitメソッドです。

DB::commit();

コネクションとの接続

複数のコネクションを使用するときはDB::connectionメソッドが使用できます。

$users = DB::connection('foo')->select(...);

裏で動いているPDOインスタンスにアクセスすることもできます。

$pdo = DB::connection()->getPdo();

場合により、指定したデータベースに再接続する必要があるでしょう。

DB::reconnect('foo');

裏で動作しているPDOインスタンスのmax_connections制限を超えてしまい、指定したデータベースとの接続を切りたい場合は、disconnectメソッドを使用して下さい。

DB::disconnect('foo');

クエリーのログ

デフォルトでLaravelは現在のリクエストで実行された全クエリーのログをメモリー上に保存しています。しかし、大量の行を挿入するような状況では、アプリケーションがメモリを使いすぎるでしょう。ログを止めるには、disableQueryLogメソッドを使用してください。

DB::connection()->disableQueryLog();

実行済みのクエリーの配列を取得するために、getQueryLogメソッドが使用できます。

   $queries = DB::getQueryLog();

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

バージョン

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる