情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

サイトレビューサイト制作への道その4

チェックボックスの内容をデータベースへの保存

1.カラムを増やす

2.チェックボックスのデータを保存する

3.まとめ

1.カラムを増やす

前回作ったチェックボックスですが、あのままではデータベースにカテゴリーの情報が保存されません。 なので「sites」テーブルのカラムを増やしていくつかのタグを保存できるようにします。 注意点として今回のやり方だとタグ付けできる数に制限が出来てしまいます。無制限にタグ付けするやり方はまたいつか、、、 f:id:nonaka-katuma-hal:20160802184219j:plain こんな感じになります。注意点はデフォルト値をNULLにしておくくらいです。

2.チェックボックスのデータを保存する

次にを保存をしていきます例によって制作中のフォルダを開いて、「SitesController.php」を編集していきます。

if ($this->request->is('post')) {

の中にいろいろ記述していきます。

$test01 = $this->request->data( 'Site.cat_id.0');
$test02 = $this->request->data( 'Site.cat_id.1');
$test03 = $this->request->data( 'Site.cat_id.2');
$test04 = $this->request->data( 'Site.cat_id.3');
$test05 = $this->request->data( 'Site.cat_id.4');

これでまずチェックボックスにチェックを入れたもののデータを$test01~$test05に入れます。 次に

$request = $this->request->data;

$request['Site']['cat_id1'] = $test01; 
$request['Site']['cat_id2'] = $test02;
$request['Site']['cat_id3'] = $test03;
$request['Site']['cat_id4'] = $test04;
$request['Site']['cat_id5'] = $test05;
debug($request);     //データの確認表示する
// exit;   //強制終了

これで先ほど用意したcat_id1~cat_id5までにデータを代入していきます。 ちなみに最後のexit;のコメントを外すとプログラムを強制終了してデバッグ表示ができます。

if ($this->Site->save($request)) {//保存する
                                                        
            $this->Flash->success(__('The site has been saved.'));      //保存で来た
            return $this->redirect(array('action' => 'index'));    
            } else {
                $this->Flash->error(__('The site could not be saved. Please, try again.'));
            }

元からあるのがほとんどですが、$requestを入れることでデータを保存出来ます。 ちなみにうまくいけばPHPmyadminがこうなります。(三行目) f:id:nonaka-katuma-hal:20160802185619j:plain

3.まとめ

うーんやはり前回も思った通りcakePHPのデータのやりとりは難しさを感じました。

$test01 = $this->request->data( 'Site.cat_id.0');
$request['Site']['cat_id1'] = $test01; 

データを求めるのに'Site.cat_id.0'とドットで繋いでくという感覚になれなかったです。。

どちらかというと二行目の['Site']['cat_id1']は配列だととらえやすいのでまだ分かりやすいですね。

ただこれもcakePHPのルールなどでしっかり覚えて使えるようになっていきたいと思いました。