2014年07月20日
2014/07/15 CakePHP2 -4- MVCマスタ情報表示 どこをいじればいいの。。。
以前、「2014/07/09 CakePHP2をインストールと自動生成」で、自動生成について触れました。
今回は、DBは正規化するものですが、正規化するとDBが細かくなります。◎◎コードを別テーブルにしたり、繰り返し項目も別テーブルにしないと、後で膨大な重複データを精査する作業に死にそうになるので、最初が肝心です。
で、目的をはっきりさせると、大分類をコンボボックスで選ぶってだけです。
こんなん、cake使わなければ、秒殺なのにぃ~と思いますよねw
ですが、まぁーcakeを覚えるために。。。
ちなみに、やり方はイロイロあるようですが、最も理想的と思われる方法で行います。
1.DB作成
これで、DBはできました。
では、bakeします。
抜粋したので、DBでエラー出たらごめんなさいねwww
2.Controllerを編集する
ここが重要です。私のインストールしたフォルダ構成だと、C:\pleiades\xampp\htdocs\yoyaku\app\Controller\MInstitutionsController.php
を修正します。
こんな感じで、マスタに登録した情報のドロップダウンリストが表示されますw
今回はこのあたりで。。。
今回は、DBは正規化するものですが、正規化するとDBが細かくなります。◎◎コードを別テーブルにしたり、繰り返し項目も別テーブルにしないと、後で膨大な重複データを精査する作業に死にそうになるので、最初が肝心です。
で、目的をはっきりさせると、大分類をコンボボックスで選ぶってだけです。
こんなん、cake使わなければ、秒殺なのにぃ~と思いますよねw
ですが、まぁーcakeを覚えるために。。。
ちなみに、やり方はイロイロあるようですが、最も理想的と思われる方法で行います。
1.DB作成
--施設DB
CREATE TABLE IF NOT EXISTS `m_institution` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '施設id',
`institution_kind_l_cd` char(9) NOT NULL COMMENT '施設大分類コード3桁',
`name` varchar(90) NOT NULL COMMENT '施設名',
`created` datetime NOT NULL COMMENT '作成日',
`modified` datetime NOT NULL COMMENT '更新日',
PRIMARY KEY (`id`,`institution_kind_l_cd`),
KEY `institution_kind_l_cd` (`institution_kind_l_cd`),
KEY `institution_kind_m_cd` (`institution_kind_m_cd`),
KEY `institution_kind_n_cd` (`institution_kind_n_cd`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='施設マスタ' AUTO_INCREMENT=1 ;
--大分類
CREATE TABLE IF NOT EXISTS `m_institution_kind_l` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '施設種類id',
`cd` char(9) NOT NULL COMMENT '施設大分類コード3桁',
`name` varchar(60) NOT NULL COMMENT '施設大分類名',
`created` datetime NOT NULL COMMENT '作成日',
`modified` datetime NOT NULL COMMENT '更新日',
PRIMARY KEY (`id`),
UNIQUE KEY `cd` (`cd`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='施設大分類マスタ' AUTO_INCREMENT=1;
--外部キー指定
ALTER TABLE `m_institution`
ADD CONSTRAINT `m_institution_ibfk_1` FOREIGN KEY (`institution_kind_l_cd`) REFERENCES `m_institution_kind_l` (`cd`);
これで、DBはできました。
では、bakeします。
cd c:\pleiades\xampp\htdocs\yoyaku\app
.\Console\cake bake all テーブル名
抜粋したので、DBでエラー出たらごめんなさいねwww
2.Controllerを編集する
ここが重要です。私のインストールしたフォルダ構成だと、C:\pleiades\xampp\htdocs\yoyaku\app\Controller\MInstitutionsController.php
を修正します。
App::uses('AppController', 'Controller');
//追加するクラスを追加します。
App::uses('MInstitutionKindL', 'Model');
/**
* MInstitutions Controller
*
* @property MInstitution $MInstitution
* @property PaginatorComponent $Paginator
*/
class MInstitutionsController extends AppController {
/**
* Components
*
* @var array
*/
public $components = array('Paginator');
/**
* 関連DB
* @var unknown
*/
//このメソッド毎追加します。このメソッドはディスパッチされたときに必ず呼び出されるので、
//たとえば、~後略~で省略されているadd,view,index,delete毎にひつようなら、そこで①から5行を追加する必要があります。
/**
* 一番最初に呼ばれるらしい。(オーバーライド)
* @see Controller::startupProcess()
*/
public function startupProcess(){
parent::startupProcess();
//①Javaだとおこられますよね。クラス名と変数名を同じ名前にするとか。。。
$MInstitutionKindL = new MInstitutionKindL();
$result = $MInstitutionKindL->find('list');
//② 'selectMInstitutionKindL'の名前で、検索結果を設定します。この設定値は、Viewでも使用できます。
$this->set( 'selectMInstitutionKindL', $MInstitutionKindL->find( 'list', array(
'fields' => array( 'cd', 'name') //既存のフィールド
)));
}
/**
* index method
*
* @return void
*/
public function index() {
$this->MInstitution->recursive = 0;
$this->set('mInstitutions', $this->Paginator->paginate());
}
~後略~
}
Controllerでsetした。selectMInstitutionKindLを使用します。①をコメントアウトして、②を追加します。これで、コンボボックスで選択可能です。
~前略~
//①
// echo $this->Form->input('institution_kind_l_cd');
//②
echo $this->Form->input( 'institution_kind_l_cd', array(
'type' => 'select',
'options' => $selectMInstitutionKindL
));
~後略~
こんな感じで、マスタに登録した情報のドロップダウンリストが表示されますw
今回はこのあたりで。。。
Posted by MJ at 11:05│Comments(0)
│CakePHP2
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。