CakePHP では hasOne(1対1), hasMany(1対多), belongsTo(多対1), hasAndBelongsToMany(多対多)でModelを結びつけることができる。これは非常に便利な機能のひとつ。これを単純に使う方法はたくさん書かれているが、複数を取り扱うものが少なく感じた。そもそも調べるキーワードがなかなか難しい。
さて、帳票の場合、例えば見積書を作るとすれば、親テーブルと小テーブルを作り、親テーブルには件名や担当、相手社名などが入り、小テーブルは明細行、つまり商品や数量、単価となる。
◆Model
- 見積書は複数の明細行を持つ
- 見積 hasMany 明細
- 見積書は顧客を持つ
- 見積 belongsTo 顧客
- 明細は見積に属する
- 明細 belongsTo 見積
スポンサードリンク
◆View, add.ctp
<?php echo $form->create(‘見積’);?>
<?php
echo $form->input(‘顧客_id’);
echo $form->input(‘件名’);
for($i=0;$i<9;$i++){
echo $form->input(‘明細.’ . $i . ‘.品名’);
echo $form->input(‘明細.’ . $i . ‘.単価’);
echo $form->input(‘明細.’ . $i . ‘.数量’);
}
?>
<?php echo $form->end(‘Submit’);?>
◆Controller, 見積_controller.php
function add() {
if (!empty($this->data)) {
$this->見積->create();
if(!$this->見積->saveAll($this->data)===false) {
$this->Session->setFlash(__(‘The 見積 has been saved’, true));
$this->redirect(array(‘action’=>’index’));
} else {
$this->Session->setFlash(__(‘The 見積 could not be saved. Please, try again.’, true));
}
}
$customers = $this->見積->Customer->find(‘list’);
$this->set(compact(‘customers’));
}
※実際にはコード中に日本語を使用していない
※Ajaxを使わなない場合の例
※’dependent’ => true,を見積Modelの明細定義に指定すると、見積を削除した際に明細も削除できる
※これはサンプルなので完全な動作はしない
参考文献
- 関連: モデルを結びつける :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2 Collection :: The Cookbook :
301 Moved Permanently - CakePHP 1.2 の saveAll その2 | Sun Limited Mt. :
CakePHP 1.2 の saveAll その2 | Sun Limited Mt.CakePHP 1.2 の saveAll その1 では同一モデルへの複数レコードを saveAll - CakePHPの基礎(1ページで複数モデル)|HyDev ~クソオヤジの戯言~#main#main :
301 Moved Permanently - CakePHPの基礎(1ページで複数モデル)2|HyDev ~クソオヤジの戯言~#main#main :
301 Moved Permanently - CakePHPの基礎(1ページで複数モデル)3|HyDev ~クソオヤジの戯言~#main#main :
301 Moved Permanently - CakePHPの基礎(1ページで複数モデル)4|HyDev ~クソオヤジの戯言~ :
301 Moved Permanently
コメント