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

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

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

関連記事

【HTML5】 FormDataオブジェクトがログに出力されない(出力方法追記)

どうも仕様みたいですね。 どうやっても、無理でした。 隠ぺいされたオブジェクトっていうのも気持ち悪いですね。 それをajaxで送る、っていうのも気持ち悪い。 var fd = new FormData …

【PHP】 全角記号のときmb_strwidthが1を返す

PHPで全角の判断に、mb_strwidthを使っていました。 mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。 そうしたら、「◎」を入れたらうまくいかないとクラ …

WordPressのメインループ&サブループ

WordPressのテンプレートを作っていると、ループの構造で混乱してくる人がいます。 ですので、不要なHTMLを除いた、単純な構造を書いておこうと思います。 解説はコメントに書いています。 < …

MarkDownDiagram

マークダウンで画面遷移図などのダイアグラムを作れるツールをブラウザベースで作ってくださった方がおられます。 大変重宝していて、業務で使いまくりです。 https://github.com/wakufa …

Visual Studio CodeでWSL上のPHPをデバッグ

前書き Sublime Text 3を愛用しているんですが、だんだん他のエディタが追いついて、追い抜いて来たような感じがします。 Sublime Textは更新が止まってしまっているので、まあしょうが …