Edited at

PHPのORM「Idiorm」とActiveRecord「Paris」を使ってみた感じ

More than 3 years have passed since last update.

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