info

category : CakePHP 2.x
[CakePHP 2.x]テーブルのカラム名を取得  @ CakePHP 2.x , PHP 2013年11月16日
テーブルのカラム名を取得
$this->Model->getColumnTypes();

Controller
$columnTypes=$this->SystemTest->getColumnTypes();
$columnNames=array_keys($columnTypes);
$this->set('columnTypes', $columnTypes);
$this->set('columnNames', $columnNames);

View
columnTypes<br/>
<?php
$tmp=var_export($columnTypes,true);
echo str_replace("\n", "<br/>", $tmp);
?>
<br/><br/>
columnNames<br/>
<?php
$tmp=var_export($columnNames,true);
echo str_replace("\n", "<br/>", $tmp);
?>

Sample
[CakePHP 2.x]DBを切替える  @ CakePHP 2.x , PHP 2013年7月26日
DB設定を記述する。

Config/database.php
public $default = array(
	'datasource' => 'Database/Mysql',
	'persistent' => false,
	'host' => 'localhost',
	'login' => 'ktyr',
	'password' => 'ktyrps',
	'database' => 'ktyrdb',
	'prefix' => '',
	'encoding' => 'utf8',
);
public $testdb = array(
	'datasource' => 'Database/Mysql',
	'persistent' => false,
	'host' => 'localhost',
	'login' => 'ktyr',
	'password' => 'ktyrps',
	'database' => 'ktyrtestdb',
	'prefix' => '',
	'encoding' => 'utf8',
);

DBを切替える。
各Model内で切替える場合。
/* testdbに切替える */
$this->setDataSource('testdb');

/* defaultに切替える */
$this->setDataSource('default');
[CakePHP 2.x]トランザクション  @ CakePHP 2.x , PHP 2013年7月25日
各Model内
/* トランザクションスタート */
$dataSource=$this->getDataSource();
$result=$dataSource->begin();

/* コミット */
$result=$dataSource->commit();

/* ロールバック */
$result=$dataSource->rollback();


AppModel.phpに下記のようにするのもいいかもね。
public function begin(){
  return $this->getDataSource()->begin();
}
public function commit(){
  return $this->getDataSource()->commit();
}
public function rollback(){
  return $this->getDataSource()->rollback();
}
[CakePHP 2.x]checkboxでvalueを0に出来ない  @ CakePHP 2.x , PHP 2013年5月28日
checkboxでvalueを0に出来ない

この方法だと出来ない。
<?php
$options = array('hiddenField' => false,'value'=>'0');
echo $this->form->checkbox('samples.check1.', $options);
echo '1-A<br/>';
$options = array('hiddenField' => false,'value'=>'1');
echo $this->form->checkbox('samples.check1.', $options);
echo '1-B';
?>

出力結果
<input type="checkbox" name="data[samples][check1][]"  value="1" id="samplesCheck1"/>1-A<br/>
<input type="checkbox" name="data[samples][check1][]"  value="1" id="samplesCheck1"/>1-B


理由はFormHelper.phpのcheckboxメソッドに下記の処理があるため
if (empty($options['value'])) {
  $options['value'] = 1;
}


しかし、下記のやり方だと出来る。
ただし、<div>と<label>が勝手に付いてしまう。
<?php
$label=array('2-A','2-B','2-C','2-D');
echo $this->Form->input('check2', array('type' => 'select',
                                       'multiple' => 'checkbox',
                                       'options' => $label,
                                       'div'=>false,
                                       'label'=>false,
                                       'hiddenField'=>false,
                                       'before'=>'',
                                       'after'=>'',
                                       'between'=>'',
                                       'value' => array(0, 2)
                                       )
                         );
?>


出力結果
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="0" id="SamplesCheck20" /><label for="SamplesCheck20" class="selected">2-A</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="1" id="SamplesCheck21" /><label for="SamplesCheck21">2-B</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="2" id="SamplesCheck22" /><label for="SamplesCheck22" class="selected">2-C</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="3" id="SamplesCheck23" /><label for="SamplesCheck23">2-D</label></div>


selectメソッドでも出来る。
<?php
$label=array('2-A','2-B','2-C','2-D');
echo $this->Form->select('check3',
                         $label,
                         array('multiple' => 'checkbox',
                               'div'=>false,
                               'label'=>false,
                               'hiddenField' => false,
                               'class'=>'testClass'
                         )
                         );
?>


sample