WebProgを極めて居酒屋を開発する Twitter

このブログは 2008 年から更新されていません。すべての記事が古いので、あまり参考にしないようにしたほうが良いです。時が流れるのは早いのです。

 | 

2008/03/01

rhacoのデータベースをマスターしたい人

rhacoネタばっかりじゃねーか!って声もそろそろ聞こえてきそう><!


さてさて、rhacoを少し触ったことがあるひとは、SimpleTagの強力さとかに目が行きがちですが、rhacoはDB周りも非常に強力です。

rhacoが対応しているDatabaseはMySQL, PostgreSQL, SQLite, Oracleの4種類があります。

そのすべてで、ほとんどの場合SQL文を直接記述することは無いでしょう。*1


ここでは簡単な例を挙げながら、rhacoを使ったデータベース操作を解説していきます。

単純なデータの追加/取得/更新/削除

project.xmlの場所はわかりますね?

まずproject.xmlにこのような簡単なモデルを定義してみました。

<project rhacover="1.4.9" version="0.0.1" name="sample">
    <database name="sample">
        <table name="item">
            <column name="id" type="serial" />
            <column name="subject" type="string" size="100" require="true" unique="true" />
            <column name="description" type="text" min="10" max="1000" />
        </table>
    </database>
</project>

rhacoでは、このようにすべての設定をXMLで行います。

database定義の中にtable定義があります。

tableのnameを設定すると、その名前に対応するclassがsetup.phpで設定すると自動で生成されます。

ファイルが生成される場所は、 library/model 以下です。


まずは、データベースの設定を行います。

setup.phpにアクセスし、DBエンジンやテーブルのプレフィクスの設定などを行って下さい。

そうすると、セットアップ画面の上部に database のリンクが追加されます。

管理画面用のCRUDは、rhacoが提供してくれます。これでアプリケーションに必要の無いコードを書く必要はありません!

この画面で遊んでみるのも良いでしょう!


データの登録

データの登録をする簡単なコードを示します。

<?php
require_once '__init__.php';
Rhaco::import('model.Item');

$db = new DbUtil(Item::connection());

$item = new Item();
$item->setSubject('こんにちはこんにちは');
$item->setDescription('rhacoのデータベースについて説明してるよ!!');
if($db->insert($item)){
	echo 'success';
} else {
	echo 'fail';
}
echo PHP_EOL;
データの取得
<?php
require_once '__init__.php';
Rhaco::import('model.Item');

$db = new DbUtil(Item::connection());

$item = $db->get(new Item(1)); // $db->get(new Item(), new C(Q::eq(Item::columnId(), 1))); と等価(なはず...w)。

if(Variable::istype('TableObjectBase', $item)){
    echo 'subject:', PHP_EOL;
    echo $item->getSubject();
} else {
    echo 'not found.', PHP_EOL;
}
データの更新

取得してから登録する。

<?php
require_once '__init__.php';
Rhaco::import('model.Item');

$db = new DbUtil(Item::connection());

$item = $db->get(new Item(1));
$item->setDescription('やっぱり文字にするのは面倒だよ><!');
$item->save($db); // このように書く事も出来ます。この場合は、 $db->update($item); とおなじ。
データの削除

モデルをdeleteに渡すだけです

<?php
require_once '__init__.php';
Rhaco::import('model.Item');

$db = new DbUtil(Item::connection());

$item = $db->get(new Item(1));
$db->delete($item);

全削除もできます。

<?php
require_once '__init__.php';
Rhaco::import('model.Item');

$db = new DbUtil(Item::connection());
$db->alldelete(new Item());

ちょっと用事が。。。あとで書く

*1:「SQL文書こうかなぁ」なんてLingrでつぶやけば、trunkで機能追加されたりすることもありますw

 |