CakePHPのModelで複数のテーブルにデータを保存したいのですがどうしてもコードが長くなってしまいます。
もっと簡潔な方法があれば教えてください。
やりたいこととしては下記になります。
会員登録フォームで会員情報を入力して送信ボタンを押下するとModelのhoge()というメソッドが呼ばれます。
そこで引数として渡されたデータをテーブルA テーブルBにデータ登録や更新をします。(※既に登録済みの場合、更新する。)
更新の場合はテーブルAの情報を更新前にテーブルCにデータ登録します。
php
1$arrayの中 2----------------------------------------- 3$array = array( 4 'id' => 1, 5 'name' => '山田 太郎', 6 'age' => '20', 7 'gender' => '男', 8 'address' => '東京都', 9 'phone' => '07012345678', 10 'emailaddress' => 'hoge@hoge.com', 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 . 20); 21----------------------------------------- 22 23テーブルAのカラム 24----------------------------------------- 25userid 26username 27age 28sex 29add 30. 31. 32. 33. 34. 35. 36----------------------------------------- 37 38テーブルBのカラム 39----------------------------------------- 40id 41phone 42email 43. 44. 45. 46----------------------------------------- 47 48テーブルCのカラム 49----------------------------------------- 50userid 51username 52age 53sex 54add 55. 56. 57. 58. 59. 60. 61----------------------------------------- 62 63hogemodel.php(モデル) 64 65public $fieldsA = array(userid, username, age, sex, add); 66public $fieldsB = array(id, phone, email); 67public $fieldsC = array(userid, username, age, sex, add); 68 69public function hoge($array) { 70 //既に登録されていないか確認 71 $sql = "SELECT * FROME tableA WHERE tableA.id = :id;"; 72 $params = array( 73 'id'=> $array['id'] 74 ); 75 $kakunin = $this->query($sql,$params); 76 77 //テーブルAのデータ 78 $dataA['tableA']['userid'] = $array['id']; 79 $dataA['tableA']['username'] = $array['name']; 80 $dataA['tableA']['age'] = $array['age']; 81 . 82 . 83 . 84 . 85 . 86 87 //テーブルBのデータ 88 $dataB['tableB']['id'] = $array['id']; 89 $dataB['tableB']['phone'] = $array['phone']; 90 $dataB['tableB']['email'] = $array['emailaddress']; 91 . 92 . 93 . 94 . 95 . 96 $this->Hoge->save($dataA, false, $fieldsA); 97 $this->Hoge->save($dataB, false, $fieldsB); 98 99 //既に登録されていた場合、テーブルCにテーブルAの情報を登録 100 if(!empty($kakunin)) { 101 $dataC['tableC']['userid'] = $kakunin['userid']; 102 $dataC['tableC']['username'] = $kakunin['username']; 103 $dataC['tableC']['age'] = $kakunin['age']; 104 . 105 . 106 . 107 . 108 . 109 $this->Hoge->save($dataC, false, $fieldsC); 110 } 111}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。