前回のままではテーブルの列の数だけSQLが発行されてしまうので
の方法で連想配列からルックアップできるように改善。
class APPID_ColumnsManager extends Ethna_AppManager に
getResultArray() を作成しておき、
class APPID_ActionForm extends Ethna_ActionForm
の _setFormTemplate を次のように改造
の方法で連想配列からルックアップできるように改善。
class APPID_ColumnsManager extends Ethna_AppManager に
getResultArray() を作成しておき、
class APPID_ActionForm extends Ethna_ActionForm
の _setFormTemplate を次のように改造
function _setFormTemplate($form_template){ $map = array( /// ここでマッピングを調整 'form_type'=> array( 'int' => FORM_TYPE_TEXT, 'string' => FORM_TYPE_TEXT, 'datetime'=> FORM_TYPE_TEXT, 'boolean' => FORM_TYPE_TEXT, 'blob' => FORM_TYPE_TEXTAREA, ), 'type' => array( 'int' => VAR_TYPE_INT, 'string' => VAR_TYPE_STRING, 'datetime'=> VAR_TYPE_DATETIME, 'boolean' => VAR_TYPE_STRING, 'blob' => VAR_TYPE_STRING, ), 'max' => array( 'string' => true, ), ); $manager =& $this->backend->getManager( 'columns' ); /// ★ $resultArray =& $manager->getResultArray(); /// ★ $ethnadb =& $this->backend->getDB(); foreach( $this->tables as $vv ){ $columns =& $ethnadb->getMetaData( $vv ); if( is_array( $columns ) === false ){ /// 異常系 Ethna::isError検出できない為オリジナルと同じ判定 $this->backend->log( LOG_WARNING, "取得失敗 getMetaData({$vv})" ); continue; } foreach( $columns as $k => $v ){ if( ! array_key_exists( $v['name'], $form_template ) ){ $form_template[$v['name']] = array(); } if( ! array_key_exists( 'type', $form_template[$v['name']] ) ){ if( array_key_exists( $v['type'], $map['type'] ) ){ $form_template[$v['name']]['type'] = $map['type'][$v['type']]; } } if( ! array_key_exists( 'form_type', $form_template[$v['name']] ) ){ $form_template[$v['name']]['form_type'] = $map['form_type'][$v['type']]; } if( array_key_exists( $v['type'], $map['max'] ) ){ if( ! array_key_exists( 'max', $form_template[$v['name']] ) ){ $form_template[$v['name']]['max'] = $v['len']; } } if( ! array_key_exists( 'filter', $form_template[$v['name']] ) ){ $form_template[$v['name']]['filter'] = 'ltrim,rtrim,ntrim'; } ////////////////////////////// /// if( ! array_key_exists( 'name', $form_template[$v['name']] ) ){ /// $o =& $this->backend->getObject( 'columns' /// , array( 'table_name', 'column_name' ) /// , array( $vv, $v['name'] ) /// ); /// if( Ethna::isError( $o ) ){ /// 異常系 /// $this->backend->log( LOG_ERR, 'データベース障害' ); /// continue; /// } /// if( ! $o->isValid() ){ /// 該当なし /// continue; /// } /// $form_template[$v['name']]['name'] = $o->get( 'column_comment' ); /// } /// ↓ if( ! Ethna::isError( $resultArray ) ){ if( ! array_key_exists( 'name', $form_template[$v['name']] ) ){ if( array_key_exists( $v['name'], $resultArray[2] ) ){ $form_template[$v['name']]['name'] = $resultArray[2][$v['name']]['column_comment']; } } } /// ////////////////////////////// } } return parent::_setFormTemplate($form_template); }完成。コメント変更は
ALTER TABLE tablename CHANGE fieldname fieldname INT COMMENT 'コード';カラムのコメントは、255文字の長さまで。
コメントは SHOW CREATE TABLE と SHOW FULL COLUMNS ステートメントによって表示。
SHOW FULL COLUMNS FROM tablename; SHOW COLUMNS FROM areas; SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='tablename';2009/09/17 補足を追記