SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

PHPでの「ORMライブラリ」機能比較

  • X ポスト
  • このエントリーをはてなブックマークに追加

Propel

 メジャーなWebアプリケー諸フレームワークの1つであるsymfonyが1つ前のマイナーバージョンである1.2の時にデフォルトとして採用していたORMです。2、3年前まではPHPのORMと言えばPropelが定番という感じがありましたが、今はDoctrineの方が定番になっています。

特徴

 PropelはあらかじめデータベーススキーマをXML形式で準備しておき、そのXMLファイルからORMのクラスを生成します。そのXMLファイルはDBDesignerから自動変換できます。もし、DBDesignerでスキーマを作成していなくても、DBDesigner上で既存のスキーマからリバースエンジニアリングし、DBDesignerでXMLを保存できます。

 Propelを利用するためにはlibxml2とPhingをインストールしておく必要があり、環境構築に多少手間がかかります。PhingとはGNU makeやApache ANTのビルドツールをPHPで実装したソフトウェアです。

実行例

 以下に実行例を記載します。

[リスト7]設定ファイル
<?php
// propelライブラリを読み込む
require_once 'lib/vendors/propel/runtime/lib/Propel.php';

// データベース、ORMの設定を読み込む
Propel::init("./orm/build/conf/orm-conf.php");

// クラスの場所を設定する
set_include_path("./orm/build/classes" . PATH_SEPARATOR . get_include_path());


// データベースへ接続
$conn = Propel::getConnection();
[リスト8]サンプルスクリプト
<?php
// 設定を読み込む
require_once 'bootstrap.php';

// Authorオブジェクトを生成
$author = new Author();
$rand = rand(1, 10000);
$author->setName('name-'.$rand);
$author->setPassword(sha1('password-'.$rand));
$author->save($conn);

// ユーザオブジェクトを取得
$id = $author->getId();
$author = AuthorQuery::create()->findPK($id);


// パスワードを変更し、更新
$author->setPassword(sha1('newpassword-'.rand(1,100000)));
$author->save();


// Authorを削除
$author->delete();

 プログラムのコードはDoctrineと同じような記述ができます。Doctrineに比べるとORM用にXMLファイルを準備しなければいけない点などでメンテナンス性が劣ります。

php-activerecord

 プロジェクト名が意味するとおりActive Recordモデルを実装しているORMです。外部キーの保持、値のバリデーション、データ操作の前処理、後処理を効率的に行うコールバックを実装しています。

特徴

 DoctrineやPropelと比べると機能は少なくなりますが、充分にデータベースを抽象化しているので小規模、中規模の開発に適しています。

 php-activerecordの利点はスキーマにあわせたコードのファイルの生成が不要である点です。よって、スキーマの変更のたびにORM用のクラスを再生成する必要はありません。その代わり、PDTやPHPEclipseなどの統合開発環境でメソッドのオートコンプリートを行えません。

実行例

 以下に実行例を記載します。

[リスト9]設定ファイル
<?php
// ライブラリの読み込み
require_once 'lib/vendor/php-activerecord/ActiveRecord.php';

// データベース接続先の設定
ActiveRecord\Config::initialize(function($cfg)
{
  $cfg->set_model_directory('models');
  $cfg->set_connections(array(
         'development' => 'mysql://orm@192.168.0.40/orm'));
});
[リスト10]サンプルスクリプト
<?php
// 設定の読み込み
require_once 'bootstrap.php';

// authorを追加
$author = Author::create(array('name' => 'Test', 'password' => sha1('pasword-'.rand(1, 100000))));

// Authorオブジェクトを取得
$author = Author::find($author->id);

// パスワードを変更し、更新
$author->password = sha1('newpassword-'.rand(1,100000));
$author->save();

// Authorを削除
$author->delete();

 基本的にはDoctrineやPropelと同じようにActive Recordモデルでコードを記述できますが、データの追加の際には配列による指定を行わなければならないため、DoctrineやPropelに比べて提供する機能の抽象度が下がります。

次のページ
PHPDAO

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト まつぼっくり (マツボックリ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5858 2011/04/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング