LoginSignup
55
56

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-07-15

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

55
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
56