Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
56
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
56
Help us understand the problem. What are the problem?