導入

導入 – データベースのデータを簡単に取得・変更するためのオブジェクト指向インターフェイス

MDB_QueryTool Description

このパッケージは、SQL クエリ言語をオブジェクト指向で抽象化したものです。 setWhere()setOrder()setGroup()setJoin() などのメソッドを提供することで、簡単にクエリを作成できるようにしています。 また、HTML フォームと連携するために、習得しやすいインターフェイスを提供しています。 これはカラムのデータを配列形式で格納したもので、更新や追加はデータベースで行います。 このパッケージは SQL-Builder をもとにしており、 SQL 文の作成や実行が簡単にできるようになります。 MDB および MDB2 がサポートするすべてのデータベースエンジンで利用できます。

これは DB_QueryTool をそのまま移植したものなので、 同じ API が使用できます。違うのはクラス名だけです (当然、コンストラクタの名前も違います)。 残念ながら、完全なドキュメントはまだ用意できていません。

例 1 - 配列

MDB_QueryTool の利用法としてお勧めなのは、 それを継承したクラスを作成することです。以下に例を示します。

<?php
require_once 'MDB/QueryTool.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    var 
$table        TABLE_CARS;
    var 
$sequenceName TABLE_CARS;

    
// デフォルトでこうなりますが、一応書いておきます……
    
var $primaryCol =   'id';

    
/**
     * ここでは、テーブル名に対応する短縮名を割り当てています。
     * これは、テーブル名が変わった際などの対策として必要です。
     * たとえば、プロバイダの db にアプリケーションを配置する際などに
     * 各テーブル名に強制的にプレフィックスをつけられてしまうことがあるかも
     * しれません。そんな場合でも、あなたのアプリケーション内で
     * テーブルの結合条件を指定している部分などを書き換える必要はありません。
     * 実際のテーブル名のかわりに、ここで指定した短縮名が用いられるからです。
     */
    
var $tableSpec = array(
        array(
'name'  => TABLE_CARS'shortName' =>  'cars'),
        
//array('name'  => TABLE_TIME, 'shortName' =>  'time'),
    
);
}


// Car クラスのインスタンスを作成します
$car = new Car($dsn);

// 3 番の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->get(3);
var_dump($res);

// すべての車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->getAll();
var_dump($res);

// 最初の 10 台の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->getAll(010);
var_dump($res);

// 色が赤で、快適な車をすべて取得し、価格順に並べます
$car->reset();
$car->setWhere('color="red"');
$car->addWhere('clima=1');
$car->setOrder('price');
$res $car->getAll();
var_dump($res);

// 新しい車をデータベースに追加します
$data = array(
    
'model' => 'Super Trooper',
    
'hp'    => 140,
    
'color' => 'black',
    
'clima' => 0,
    
'price' => 19000
);
$newCarId $car->save($data);
var_dump($newCarId);

// 既存の車の情報を更新します
$data = array(
    
'id'    => $newCarId,
    
'clima' => 1,
    
'price' => 20000,
);
$res $car->save($data);   // $car->update($data); と同じです
var_dump($res);


// データベースから車を削除します
$res $car->remove($newCarId);
var_dump($res);
?>

例 2 - クラス

MDB_QueryTool は、クラスに対して使用することもできます。 使用例は、このようになります。

<?php
require_once 'MDB/QueryTool.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    var 
$table        TABLE_CARS;
    var 
$sequenceName TABLE_CARS;

    
// デフォルトでこうなりますが、一応書いておきます……
    
var $primaryCol =   'id';

    
/**
     * ここでは、テーブル名に対応する短縮名を割り当てています。
     * これは、テーブル名が変わった際などの対策として必要です。
     * たとえば、プロバイダの db にアプリケーションを配置する際などに
     * 各テーブル名に強制的にプレフィックスをつけられてしまうことがあるかも
     * しれません。そんな場合でも、あなたのアプリケーション内で
     * テーブルの結合条件を指定している部分などを書き換える必要はありません。
     * 実際のテーブル名のかわりに、ここで指定した短縮名が用いられるからです。
     */
    
var $tableSpec = array(
        array(
'name'  => TABLE_CARS'shortName' =>  'cars'),
        
//array('name'  => TABLE_TIME, 'shortName' =>  'time'),
    
);
}


// Car クラスのインスタンスを作成します
$car = new Car($dsn);
$car->useResult('object');

// 3 番の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->get(3)->fetchRow();
var_dump($res);

// すべての車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$cars $car->getAll();
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 最初の 10 台の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$cars $car->getAll(010);
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 色が赤で、快適な車をすべて取得し、価格順に並べます
$car->reset();
$car->setWhere('color="red"');
$car->addWhere('clima=1');
$car->setOrder('price');
$cars $car->getAll();
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 新しい車をデータベースに追加します
$newCar $car->newEntity();
$newCar->model 'Super Trooper';
$newCar->hp    140;
$newCar->color 'black';
$newCar->clima 0;
$newCar->price 19000;

$newCarId $newCar->save();
var_dump($newCarId);

// 既存の車の情報を更新します
$car->reset();
$res        $car->get($newCarId)->fetchRow();
$res->clima 1;
$res->price 20000;
$res->save();
var_dump($res);

// データベースから車を削除します
$car->reset();
$res $car->get($newCarId)->fetchRow();
var_dump($res->remove());
unset(
$res);
?>
MDB_QueryTool (Previous) MDB_QueryTool でオブジェクトを使用する方法 (Next)
Last updated: Sat, 25 Oct 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: subati@hotmail.com
Please add one example of how to perform a join query using QT and then return results in an object. It will be greatly appreciated.

Su Ti