月曜日, 12月 11, 2006, 02:39 AM - PHP
LiveRecord 一つずつ説明しようと思ったけども・・・一応コチラで開発しているときのテストコードのっけときます。見た方がはやいとおもって(笑)//------------------------------------------------------------
// INSERT VALUES テスト
//------------------------------------------------------------
$arrParams = array();
$objTBL->id = 9;
$objTBL->name = '入力データ';
$objTBL->insert( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// INSERT VALUES テスト2
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::SUFFIX ] = ' aaaaaaaa ';
$objTBL->id = 9;
$objTBL->name = '入力データ';
$objTBL->insert( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// INSERT SELECT テスト
//------------------------------------------------------------
$arrParams = array();
$arrParams[ 'columns' ] = array( "MAX( id ) + 1", ':name' );
$arrParams[ 'where' ] = '';
$objTBL->id = 10;
$objTBL->name = '入力データ10';
$objTBL->insert( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// INSERT SELECT テスト2
//------------------------------------------------------------
$arrParams = array();
$arrParams[ 'columns' ] = array( "MAX( id ) + 1", ':test_param' );
$arrParams[ 'where' ] = '';
$arrParams[ 'binds' ] = array( 'test_param' => 'ほげー!' );
$objTBL->id = 10;
$objTBL->name = '入力データ12';
$objTBL->insert( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// UPDATE テスト
//------------------------------------------------------------
$objTBL->id = 10;
$objTBL->name = '入力データUPDATE';
$objTBL->update();
//------------------------------------------------------------
// UPDATE テスト2
//------------------------------------------------------------
$arrParams = array();
$arrParams[ 'where' ] = 'id = 55';
$objTBL->objRows->clearParameters();
$objTBL->name = 'aaaaaaaaa';
$objTBL->update( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// UPDATE テスト3
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::WHERE ] = 'id = 1';
$arrParams[ LiveRecord::SUFFIX ] = ' AND id = 2';
$objTBL->objRows->clearParameters();
$objTBL->name = '更新';
$objTBL->update( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// DELETE テスト1
//------------------------------------------------------------
$objTBL->delete();
//------------------------------------------------------------
// DELETE テスト2
//------------------------------------------------------------
$arrParams = array();
$arrParams[ 'where' ] = 'id = 55';
$objTBL->delete( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// DELETE テスト3
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::WHERE ] = 'id = 1';
$arrParams[ LiveRecord::SUFFIX ] = ' AND id=9';
$objTBL->delete( $arrParams );
unset( $arrParams );
//------------------------------------------------------------
// SELECT テスト
//------------------------------------------------------------
$arrParams = array();
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト2
//------------------------------------------------------------
$arrParams = array();
$arrParams[ 'where' ] = 'id=2';
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト3
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'id' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::BINDS ] = array( "atari" => "%ほ" );
$arrParams[ LiveRecord::WHERE ] = "name LIKE :atari";
$arrParams[ LiveRecord::ORDER_BY ] = array( 'id' => 'ASC' );
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト3
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'id' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::ORDER_BY ] = array( 'id' => 'DESC' );
$arrParams[ LiveRecord::LIMIT ] = 2;
$arrParams[ LiveRecord::OFFSET ] = 0;
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト4
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト5
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrParams[ LiveRecord::HAVING ] = " SUM( id ) > 11 ";
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト6
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrParams[ LiveRecord::HAVING ] = " SUM( id ) > 11 ";
$arrParams[ LiveRecord::PREFIX ] = " ";
$arrParams[ LiveRecord::SUFFIX ] = " OR SUM(id) < 11; ";
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト7 CROSS JOIN
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => 'tbl_hoge'
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => 'tbl_hoge2'
);
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト8 CROSS JOIN2
//------------------------------------------------------------
$objTBLHoge = new tbl_hoge( $this->objDatabase->getConnection() );
$arrTempParams[ LiveRecord::WHERE ] = 'c_id = 1';
$objTBLHoge2 = new tbl_hoge2( $this->objDatabase->getConnection() );
$arrTempParams2[ LiveRecord::WHERE ] = 'c_id = 1';
$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => $objTBLHoge,
LiveRecord::JOIN_PARAMS => $arrTempParams
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => $objTBLHoge2,
LiveRecord::JOIN_PARAMS => $arrTempParams2
);
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト9 INNER JOIN
//------------------------------------------------------------
$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'INNER',
LiveRecord::JOIN_TABLE => 'tbl_hoge',
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge.c_id'
);
$arrRows = $objTBL->select( $arrParams );
//------------------------------------------------------------
// SELECT テスト9 INNER JOIN2
//------------------------------------------------------------
$objTBLHoge = new tbl_hoge( $this->objDatabase->getConnection() );
$arrTempParams[ LiveRecord::WHERE ] = 'c_id = 3';
$objTBLHoge2 = new tbl_hoge2( $this->objDatabase->getConnection() );
$arrTempParams2[ LiveRecord::WHERE ] = 'c_id = 3';
$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'RIGHT OUTER',
LiveRecord::JOIN_TABLE => $objTBLHoge,
LiveRecord::JOIN_PARAMS => $arrTempParams,
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge.c_id'
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'RIGHT OUTER',
LiveRecord::JOIN_TABLE => $objTBLHoge2,
LiveRecord::JOIN_PARAMS => $arrTempParams,
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge2.c_id'
);
$arrRows = $objTBL->select( $arrParams );
2 comments
( 24 views )
| このエントリーのURL
| related link
| ( 3 / 24 )
土曜日, 12月 9, 2006, 08:36 PM - PHP
まぁ似たようなこと書いた覚えがありますが・・。おはようございます、小堤です。
さて、xFrameworkのインストーラーが出来ました。デザインも(ちょっと最終調整あるけども)こんなかんじです。
※クリックしてください。
デザイン的にも、内容的にも固まったので公開します。
今晩たぶんリリースするxFramework2.1.1 Preview2に入ります。
これで.htaccessとかの書き換え作業がなくなり、スムーズにxFrameworkの導入が行えると思います。
これでxFramework2.1.1で実装する予定だったLiveRecord、CLI版、インストーラーが完成です。あとは動作チェックを細かくやってからStableにしてリリースします。
ちょっとドキュメントが追いついていないですが、そっちも随時更新してきます。
ああ・・おなかすいた。
金曜日, 12月 8, 2006, 12:08 PM - PHP
ほぃ。小堤です。ずーっと前からいっていたCLI版のブートストラップと、それに関連するクラスの実装が終わりました。これで、WRI同様のアクションの書き方で、コンソール上でxFrameworkを動作させることが出来ます。(xFramework2.1.1 Preview2で出します)
php xfc.php xa=hoge cp=test/
こんな感じ。
これが出来ると何がすごいの?って話なんですが〜。
WEBってリクエストが長いときれちゃいますよね?そういった大量の処理や、バックグラウンドで行いたい処理、クーロンなどで回したい処理などがxFrameworkを用いて実装できます。
例えば、会員の名前をPDF等に埋め込む処理を行い、その同じPDFを100枚作り、ZIPで圧縮して、それが完了したら会員にメールを送りDLしてくださいと通知する。こんな処理もウェブ上からCLI版xFrameworkをキックして、「メールが届きましたらダウンロードを開始してください。」とか表示して、終わる。みたいなことができます。まぁ用途は色々ありますが、メリットとして、ウェブ上のアクションと同じクラス、同じインタフェースで実装できますし、アクションスタックも同様に利用できます。もちろんライブラリも。
まぁ弊社では、さらに・・・色々考えていますが、それはお楽しみということで(笑)
さて、休憩するべかー
水曜日, 12月 6, 2006, 11:38 AM - PHP
約束したので、LiveRecordの記述の仕方を断片的になるかも知れませんが、説明します。まず、LiveRecordクラスは必ず継承して利用します。まぁAbstractクラスになっているので直接は利用できませんが。
1.データベースに接続できる状況を作ってください。xFrameworkで。
2.そこにtbl_testというテーブルを作り、id(int)、name(varchar(100))のフィールドを用意します。
さて、これで普通に
SELECT * FROM tbl_test;
とかで取得できるはずです。
では、同じことをする準備をします。
LiveRecordクラスを継承したクラス「tbl_test」を用意します。このときのクラス名はテーブル名と同一にしてください。
class tbl_test extends LiveRecord {
....
}
といった形になると思います。特にメソッドなどは用意しなくて結構です。
これをAutoload.xmlなどに設定してrequireしなくて良いように、したいところですが、テーブルが増える度にautoload.xmlに設定するのは、手間ですしミスがうまれるかもしれません。なので、これを_libraryに配置して、ライブラリとして自動的に読み込むようにします。
単純に、作成したtbl_test.class.phpと_libraryに配置するだけです。
さて、使ってみましょう。
indexAction.class.phpのexecute中に下記のように記述します。
$objTBL = new tbl_test( $this->objDatabase->getConnection() );
$objTBLがLiveRecordを継承したtbl_testクラスです。
これで、操作準備OKです。
では、実際に先ほどのSELECTを同一の処理を行ってみます。
$arrParams = array();
$arrRows = $objTBL->select( $arrParams );
これだけです。SELECTに関する条件などの情報は、引数の$arrParamsに記述します。
長くなってきたので、次回SELECTのいくつかの例を記載したいと思います。
月曜日, 12月 4, 2006, 07:06 AM - PHP
はい、小堤です。xFrameworkですが、アクセス毎にブートストラップが動作します。そのためソースキャッシュを独自で行いかなり高速化してあります。しかし、ファイルトランスファーの画像転送などがあるため、さらに早くしたほうがいいでしょう。
そこで、eAcceralatorというモジュールを使います。
eAccelerator自体は、ググればたくさんインストールの仕方がでてますが
cd /usr/local/src;
wget http://downloads.sourceforge.net/eaccel ... ror=jaist;
tar jxf eaccelerator-0.9.5.tar.bz2;
cd eaccelerator-0.9.5;
phpize;
./configure --enable-eaccelerator \
--with-eaccelerator-shared-memory \
--with-eaccelerator-sessions \
--with-eaccelerator-content-caching \
--with-eaccelerator-disassembler
make;
make install;
こんなかんじ。SourceForgeからDLするときに直リンクでいけないっぽいので、一回ブラウザでアクセスしてからになるのかな???
とりあえずここからDLしてくだされ。
http://sourceforge.net/project/showfile ... _id=122249
で、だ。
なんでこんな記事をかいているかというとですね。
PHP.5.2.0をつかってxFrameworkを動かしたときに。eAccelerator.0.9.5だと動かないんですよ。二回目のアクセスで画面真っ白くなります。
PHP.5.1.6+eAccelerator0.9.5ならOKなんですがね。
で、5.2.0で回避策を。
eAccelerator0.9.6-svn282-dev を使ってください。
http://snapshots.eaccelerator.net/eacce ... 282.tar.gz
からDLできますので、wgetで取得するURLを書き換えてくださればOKです。
これ、eAccelerator.0.9.6のスナップショットなので、まぁ0.9.6が出てきたときには直ってるんでしょう。こっちのソースをどうにかしないとだめかなぁと思ったのですが、さくっと直ってたので、うれしい限りです。
Back Next