Cake、複数のレコードをまとめて保存する。

CakePHP 1.3

テーブルの複数のレコードをまとめて保存する方法メモ。


まず普通にテーブルのモデルを作って。

<?php
class Mytable extends AppModel
{
	var $useTable	= 'mytable';
	
	var $alias		= "Mytable";
	
	var $primaryKey = "id";
	
       // その他、諸々の設定
}


別のモデルに hasMany で持たせる。

<?php
class EntryMyTable extends AppModel
{
	var $useTable = false;
	
	var $hasMany = array(
		'Mytable'	=> array(
			'className'		=> 'Mytable',
			'foreignKey'	=> false,
			'conditions'	=> ......,
		)
	);
}


Viewはこんな。

<?php echo $form->create(false, array('action' => '/saveurl/') ); ?>
	<?php for ( $i = 0; $i < 10; $i++ ){ ?>
		<?php echo $form->input("Mytable.$i.id", array("type" => "hidden","value" => h($i) ));?>
		<?php echo $form->input("Mytable.$i.col1", array("type" => "text"); ?>
	<?php } ?>
	<?php echo $form->end(array("label" => "submit")); ?>

でコントローラから

<?php
 $this->EntryMyTable->saveAll($this->data);

と、saveAll() メソッドで保存できた。

わーい。