teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

補足

2016/12/14 20:50

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -2,4 +2,29 @@
2
2
  なるべくモデル内でやりたいなら、Hogeモデル内のinsert関数内で、Fugaモデルのsaveも一緒にやってもいいと思います。
3
3
 
4
4
  処理的にもパターン1は、戻り値とExceptionの両方を見ていて、問題ないと思います。
5
- モデルのinsert関数内でsave()の戻り値がfalseならExceptionを投げるほうがよりスマートかもしれませんけど
5
+ モデルのinsert関数内でsave()の戻り値がfalseならExceptionを投げるほうがよりスマートかもしれませんけど
6
+
7
+ Controller
8
+ ```php
9
+ if ($this->request->is('post')) {
10
+ $this->Hoge->begin();
11
+ try {
12
+ $this->Hoge->insert($this->request->data);
13
+ $this->Fuga->insert($this->request->data);
14
+ $this->Hoge->commit();
15
+ $this->redirect('/');
16
+ } catch (Exception $e) {
17
+ $this->Hoge->rollback();
18
+ }
19
+ }
20
+ ```
21
+
22
+ Model
23
+ ```php
24
+ public function insert($data) {
25
+ $this->create();
26
+ if(!$this->save($data)) {
27
+ throw new InternalErrorException('error');
28
+ }
29
+ }
30
+ ```

1

補足

2016/12/14 20:50

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -1,2 +1,5 @@
1
1
  複数のモデルそれぞれに保存するならパターン1のControllerでいいと思いますよ。
2
- なるべくモデル内でやりたいなら、Hogeモデル内のinsert関数内で、Fugaモデルのsaveも一緒にやってもいいと思います。
2
+ なるべくモデル内でやりたいなら、Hogeモデル内のinsert関数内で、Fugaモデルのsaveも一緒にやってもいいと思います。
3
+
4
+ 処理的にもパターン1は、戻り値とExceptionの両方を見ていて、問題ないと思います。
5
+ モデルのinsert関数内でsave()の戻り値がfalseならExceptionを投げるほうがよりスマートかもしれませんけど