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

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
34
Help us understand the problem. What is going on with this article?
@iritec

PHPでORM「idiorm」を使えばかんたんにDBを操作できる

More than 3 years have passed since last update.

idiormを使えば、PDOでSQLをゴリゴリ記述しなくてよくなる

どういうイメージかというと、素のJavaScriptでゴリゴリ記述するか、jQueryでスッキリ記述するか、その違いに似ています。もちろんidiormがjQueryの方。

idiormの基本的な使い方

https://github.com/j4mie/idiorm
からファイルをダウンロード。idiorm.phpだけあれば動きます。

config.php
require_once 'idiorm.php';

ORM::configure('mysql:host=localhost;dbname=test');
ORM::configure('username', 'root');
ORM::configure('password', 'root');
ORM::configure('driver_options', [
    PDO::MYSQL_ATTR_INIT_COMMAND       => 'SET NAMES utf8',
    PDO::ATTR_EMULATE_PREPARES         => false,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
]);

idiorm.phpを読み込んでDBの読込設定。

かんたんな例

$person = ORM::for_table('person')->where('name', '山田')->find_one();

for_tableにテーブル名、
whereにフィールド名と検索したい文字列、
最後にfind_oneでひとつだけ検索,find_manyで複数できる。

上の例は
SELECT * FROM person WHERE name = "山田"
と同じです。

サンプル

詳しくはドキュメントにバッチリ書かれていますがご紹介。
http://idiorm.rtfd.org/

update

sample.php
<?php
$people = ORM::for_table('person')->find_many();
foreach ($people as $person) {
    $person->name = '山田太郎';
    $person->save();
}
?>

nameフィールドを全て山田太郎にしている。
下のコードも同じことをしていて、よりシンプル。

sample.php
<?php
ORM::for_table('person')->find_result_set()
->set('name', '山田太郎')
->save();
?>

insert

sample.php
<?php
$person = ORM::for_table('person')->create();
$person->name = 'Joe Bloggs';
$person->age = 40;
$person->save();
?>

count

sample.php
<?php
echo count(ORM::for_table('person')->find_result_set());
?>

and 検索

sample.php
<?php
$people = ORM::for_table('person')
            ->where(array(
                'name' => '山田太郎',
                'フィールド名' => '値'
            ))
            ->find_many();
?>

or 検索

sample.php
<?php
$people = ORM::for_table('person')
            ->where_any_is(array(
                array('name' => 'Joe', 'age' => 10),
                array('name' => 'Fred', 'age' => 20)))
            ->find_many();

// 下のSQLと同じ
SELECT * FROM `widget` WHERE (( `name` = 'Joe' AND `age` = '10' ) OR ( `name` = 'Fred' AND `age` = '20' ));
?>

○以上○未満

sample.php
<?php
//より下
$people = ORM::for_table('person')->where_lt('age', 10)->find_many();
//より上
$people = ORM::for_table('person')->where_gt('age', 5)->find_many();
//未満
$people = ORM::for_table('person')->where_lte('age', 10)->find_many();
//以上
$people = ORM::for_table('person')->where_gte('age', 5)->find_many();
?>

like , not like

sample.php
<?php
$people = ORM::for_table('person')->where_like('name', '%fred%')->find_many();
$people = ORM::for_table('person')->where_not_like('name', '%bob%')->find_many();
?>

order

sample.php
<?php
$people = ORM::for_table('person')->order_by_asc('gender')->order_by_desc('name')->find_many();
?>

group

sample.php
<?php
$people = ORM::for_table('person')->where('gender', 'female')->group_by('name')->find_many();
?>

as

sample.php
<?php
$people = ORM::for_table('person')->select('name', 'person_name')->find_many();

//下のSQLと同じ
SELECT `name` AS `person_name` FROM `person`;

$people_count = ORM::for_table('person')->select_expr('COUNT(*)', 'count')->find_many();

//下のSQLと同じ
SELECT COUNT(*) AS `count` FROM `person`;
?>

join

sample.php
<?php
$results = ORM::for_table('person')->join('person_profile', array('person.id', '=', 'person_profile.person_id'))->find_many();
?>

transaction

sample.php
<?php
// Start a transaction
ORM::get_db()->beginTransaction();

// Commit a transaction
ORM::get_db()->commit();

// Roll back a transaction
ORM::get_db()->rollBack();
?>
34
Help us understand the problem. What is going on with this article?
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
iritec
プログラミングのメンターサービスMENTAをつくってます http://menta.work / 個人開発コミュニティ「入江開発室」を運営(約100名) / WEB制作会社→フリー→法人化→受託をやめてサービスに専念

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
34
Help us understand the problem. What is going on with this article?