今日は完全な覚書です。
僕はYiiが大好きです。あ、PHPのフレームワークのことです。
(ぼくにとっては)使いやすい。現在はYii2がベータ版で開発中。
giiというGUIでのCRUDジェネレータがあり、
管理画面を作るにはとっても手軽、かつ、高機能に振る舞ってくれる
CRUD画面をつくってくれます。
こういったフレームワークにかならずついてくるのがORMやらARやら。
YiiにももちろんARがあります。
CActiveRecordを継承したクラスをつくれば、それで「はい完成」。
(もちろんテーブル名の設定などは必要ですが)
ただし、CActiveRecordは、初期値でフレームワークに設定されるDBへの接続を前提につくられており、複数データソースに接続する場合はちょこっと改造が必要です。
複数データソースへの接続
'components'=>array( 'db'=>array( 'connectionString' => 'mysql:host=host;dbname=databasename', 'emulatePrepare' => true, 'enableParamLogging' => true, 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', ), )
初期値ではこんな感じの設定がconfigにあります。
1つのデータソースへの接続ですね。
これを…
'components'=>array( 'db'=>array( 'connectionString' => 'mysql:host=host;dbname=databasename', 'emulatePrepare' => true, 'enableParamLogging' => true, 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', ), 'db2'=>array( 'class' => 'CDbConnection',//←これ追加 'connectionString' => 'mysql:host=host;dbname=database2', 'emulatePrepare' => true, 'enableParamLogging' => true, 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', ), )
こんな風にすると、2つめのデータソースへは
Yii::app()->db2
でアクセス可能です。おぉ。便利。
ARで利用
class TableModel extends CActiveRecord { /** * テーブル名を指定 * @return string the associated database table name */ public function tableName() { return 'tablename'; } }
YiiのActiveRecordは最低限これだけ書けばARクラスをつくることができます。
ただ、前述のとおり、Yiiのアクティブレコードは初期で設定されているYii::app()->dbを前提としていますので、2つめのデータソースのAR作成は、ちょこっと変更が必要。
そのやり方が…
class DB2Model extends CActiveRecord { /** * データ接続先を設定 */ public function getDbConnection() { return Yii::app()->db2; } /** * テーブル名 * @return string the associated database table name */ public function tableName() { return 'sessions'; } }
こんな感じgetDbConnection()をオーバーロードして、
configで追加した別のデータソースをリターンするだけ。
おお。さらに便利。
誰得です。現場からは以上です。
2014/10/29 水曜日 at 18:09:15
authentic wholesale mlb jerseys free shipping