PHPで既存システムに導入するのに手軽なORMとかActiveRecord探してて「Idiorm」と「Paris」を見つけたので、導入前に使用してみました。
Idiorm and Paris - object relational mapper (ORM), fluent SQL query builder and Active Record implementation for PHP
http://j4mie.github.io/idiormandparis/
このページみるとだいたい使用した感じが伝わってきますね。
感想
- ドキュメントしっかりしてるし簡単に読める。
- 軽量で既存システムにも導入しやすい。
- 一通り必要と思われる機能は揃っているし、書き方も嫌いじゃない。
- テーブル名とか外部キーの名前とか辛いことになってるのにも対応できる。
使用した感じ
ちょっと導入前に使用してみた感じです。
<?php
require_once './libs/idiorm/idiorm.php';
require_once './libs/paris/paris.php';
# データベース設定
ORM::configure('mysql:dbname=dbname;host=localhost:3306:/tmp/mysql.sock;charset=utf8');
ORM::configure('username', 'root');
ORM::configure('password', 'root');
<?php
require_once 'config.php';
class Company extends Model{
public static $_table = 'company'; # table name (異なる場合オーバライドできる)
public static $_id_column = 'id'; # primary key (同様)
# Userモデル関連付け
public function users(){
return $this->has_many('User', 'company'); # もし外部キーがcompany_idでなくcompanyの場合でも
}
public function systemAdmin($orm){
return $orm->where('admin', true);
}
}
<?php
require_once 'config.php';
class User extends Model{
public static $_table = 'users';
public static $_id_column = 'id';
# 関連付けはRubyのactive_reocordみたいに双方には書かなくていいみたい
public function isAdmin(){
if ($this->master == true) return true;
}
}
<?php
require 'Company.class.php';
require 'User.class.php';
$company = Model::factory('Company')->find_one(1);
$users = $company->users()->find_many();
foreach($users as $user){
if ($user->isAdmin()){
echo $user->name . 'はadminです。';
}
}
# Get
print $company->name;
# => テスト
# Update
$company->set(array(
'name' => '株式会社ユニキャスト',
'address' => '茨城県日立市'
));
$company->save();
print $company->name;
print $company->address;
#= > 株式会社ユニキャスト 茨城県日立市
# filterとかもいける
$system_admin = Model::factory('Company')->filter('systemAdmin')->find_one(1);
print $system_admin->name;
# => 株式会社ユニキャスト
# Create
$new_company = Model::factory('Company')->create();
$new_company->set(array(
'name' => '株式会社テスト',
'address' => '東京都'
));
$new_company->save();
こんな感じです。
PHPでちょっとORMとかActiveRecord使いたいときにいいかも。
参考
ドキュメント読みやすい。
Welcome to Idiorm’s documentation! — Idiorm documentation
http://idiorm.readthedocs.org/en/latest/index.html
Welcome to Paris’s documentation! — Paris documentation
http://paris.readthedocs.org/en/latest/index.html