We are ACORN!

プログラムやサーバーの設定など、技術的な記事を載せております。

PHP プログラミング

【PHP】DBライブラリ 「idiorm」

投稿日:2019-01-26 更新日:

フレームワークを使うには簡単すぎる、かといってPDOを使ってガリガリ書くのは面倒。
そんな時に役立つライブラリが「idiorm」です。(なんて読むんでしょうか?)

GitHubで公開しています。
https://github.com/j4mie/idiorm

ドキュメントはこちら。
http://idiorm.readthedocs.io/en/latest/index.html

インストール

インストールって程のことは無くて、上記GitHubからidiorm.phpをダウンロードするだけです。

簡単な使い方

まずは、コードを。

require_once 'idiorm.php';

// SQLiteのデータベースに接続
ORM::configure('sqlite:./schedule.db');
// PDOのエラーで例外を発生させるように
ORM::configure('error_mode', PDO::ERRMODE_EXCEPTION);
// SQLのログ使う。普段は使わない。
// ORM::configure('logging', true);

// scheduleテーブルからowner=satoのデータを取得し
// dateとtimeの昇順で並べ替える
$schedule = ORM::for_table('schedule')
    ->where('owner', 'sato')
    ->order_by_asc('date')
    ->order_by_asc('time')
    ->find_many();
  • ORM::configure でデータベースへの接続を書く。
    基本的にPDOのdsnを書くことになります。MySQLだともうちょっと複雑です。

    <?php
    ORM::configure([
        'connection_string' => 'mysql:host=localhost;dbname=my_database',
        'username' => 'database_user',
        'password' => 'top_secret'
    ]);
    

    のように書きます。

  • ORM::for_table('テーブル名') と使うテーブルを指定する。
  • メソッドチェーンでwhereなどを指定する。
  • find_manyfind_oneなどで複数取得するか、一件だけなのかを指定する。
  • 複数取得の場合は、$schedule にはオブジェクトの配列が入ってくる。
    $schedule[0]['time'] などと参照する。

もうちょっと突っ込んだ使い方

  • レコードの作成
    $data = [
      'owner' => 'sato',
      'title' => 'オリンピック開会式',
      'date' => '2020/07/20',
      'time' => '19:00:00'
    ];
    $schedule = ORM::for_table('schedule')->create()
        ->set($data)
        ->save();
    
    // 挿入されたレコードのidを取りたい場合
    $id = $schedule->id();
    
  • レコードの更新
    $data = [
      'id' => 12,
      'owner' => 'sato',
      'title' => 'オリンピック開会式(NHK)',
      'date' => '2020/07/20',
      'time' => '19:30:00'
    ];
    // find_one([PRIMARY KEY のフィールドの値])でレコードを指定して取得できる。
    ORM::for_table('schedule')->find_one($data['id'])
        ->set($data)
        ->save();
    
  • キャッシュ
    有効にしておくと、同じSELECTの場合、メモリ上にキャッシュされます。

    ORM::configure('caching', true);
    ORM::configure('caching_auto_clear', true);
    

    caching_auto_clearはキャッシュの自動クリアなので、trueにしておくのが良いでしょう。

  • ログ
    デバッグするのにログは欠かせないですね。

    // ログを有効にする
    ORM::configure('logging', true);
    
    /* 何かクエリーを実行する */
    
    // 全てのログを出力する。
    ORM::get_query_log();
    // 最後のログを出力する
    ORM::get_last_query();
    

もっといろいろ出来ますが、詳しくは公式ドキュメントを調べましょう。英語ですけど。

!!!注意点!!!

複合キーに対応していません。PRIMARY KEYは一つのフィールドである必要があります。
複合キーのようなものを作るなら、idフィールドをAUTOINCREMENTのフィールドにして、UNIQUE制約を複合フィールドで作るのがいいですね。

-PHP, プログラミング


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

Google Apps Script でWebAPIを作ろう

Google Apps Scriptを使うと簡単にWeb APIを作ることが出来ます。 準備 まず、Google Drive上からApps Scriptを作れるようにしましょう。 ドライブの左上の「新 …

PHP Toolkit のSoapClientが接続できない

クライアントがPHPのバージョンを5.4から5.6にアップデートしたそうです。 (そういう時は前もって連絡ください(怒)) その際、エラーが出るというのです。 ログを見ると、 SoapClientの_ …

【WSL】PHPから送信するメールをテキストに保存する

テスト環境で使っていると、PHPのメール送信をテストしたい時があります。 かといって、実際に送信されてしまうと面倒です。 xamppにはmailtodiskというのがあり、メールをディスクに保存してく …

PHPからsyslogを書く

忘備録です。 PHPでシステム回りを作っているんですが、syslogに出力出来たらなー、と思っていました。 調べたら簡単♪ function logger($mes) { exec("/bi …

【PHP】ビルトインウェブサーバーで楽々テスト環境

teratailで質問に答えるようになったら、以外にサーバー立てずにテストして、ローカル制限に引っかかっている人が多いので、簡単に立てられるローカルサーバーの構築方法を書いておこうと思います。 まず、 …