ダウンロード サンプルファイル (4.0 MB)
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で実装したソフトウェアです。
実行例
以下に実行例を記載します。
<?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();
<?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などの統合開発環境でメソッドのオートコンプリートを行えません。
実行例
以下に実行例を記載します。
<?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'));
});
<?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に比べて提供する機能の抽象度が下がります。
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト まつぼっくり(マツボックリ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
