質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ドメイン駆動設計

ドメイン駆動設計(Domain-driven design, DDD)とは、ソフトウェアの設計手法、および設計思想や哲学のことです。ドメインモデル構築の際に、設計上の判断を決定する枠組みとドメイン設計に関して議論するボキャブラリを提供するものです。

Q&A

1回答

1243閲覧

中間テーブルにID以外のカラムを持たせた場合の保存処理について

accountinitial

総合スコア0

ドメイン駆動設計

ドメイン駆動設計(Domain-driven design, DDD)とは、ソフトウェアの設計手法、および設計思想や哲学のことです。ドメインモデル構築の際に、設計上の判断を決定する枠組みとドメイン設計に関して議論するボキャブラリを提供するものです。

0グッド

0クリップ

投稿2021/06/01 09:49

編集2021/06/02 00:22

以下のようなアプリケーションを考えた時に、orderとactivity_id, report_idはどのようにして紐付けて保存しますでしょうか。

  • レポート新規作成画面で、レポートレポートに紐付くアクティビティが同時に作成できる
  • レポートは必ず一つ以上のアクティビティを持つ
  • レポート機能で使用されるアクティビティには、それぞれ順番(order)がつけられる
  • アクティビティは他の機能でも利用され得る
  • 他の機能では順番という情報は必ずしも必要にはならない
  • テーブルは、reports, activities, activity_reportである

db

app

追記

php

1// レポートを作成するユースケース 2class Interactor 3{ 4 public function __construct(ReportRepository $reportRepository) 5 { 6 $this->reportRepository = $reportRepository; 7 } 8 9 public function __invoke(InputData $inputData) 10 { 11 // レポートに紐付けるアクティビティの作成 12 $activities = []; 13 foreach ($inputData->activitiesWithOrder as $activity) { 14 $activities[] = new ActivityWithOrder( 15 new ActivityId() // 新規作成時なので、何も指定できない 16 ... 17 $activity['order'] 18 ); 19 } 20 21 // アクティビティを持つレポートの作成 22 $report = new Report( 23 new ReportId() // 新規作成時なので、何も指定できない 24 ... 25 new Activities($activities) 26 ); 27 28 // 永続化 29 $this->reportRepository->create($report); 30 } 31} 32 33// モデルを永続化するリポジトリ 34class ChildcareDocumentationRepository 35{ 36 public function __construct(ActivityRepository $activityRepository) 37 { 38 $this->activityRepository = $activityRepository; 39 } 40 41 // リポジトリ 42 public function create(Report $report) 43 { 44 // レポートの永続化 45 $daoReport = DaoReport::create([ 46 ... 47 ]); 48 49 foreach ($report->getActivities() as $activity) { 50 // アクティビティの永続化 51 $daoActivityId = $this->activityRepository->create($activity); 52 53 // Activityリポジトリの保存結果で取得されるIDを用いて中間テーブルに保存 54 $daoReport->activities()->attach([ 55 $daoActivityId => $activity->getOrder(), 56 ]); 57 } 58 59 return $daoReport->id; 60 } 61}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

画像の例で問題ないと思います

投稿2021/06/01 12:31

rysh

総合スコア874

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

accountinitial

2021/06/02 00:19 編集

ご回答いただき、ありがとうございます。 オートインクリメントのDBを使用している場合、新規作成時はidが存在しないモデルができてしまうのですが、許容範囲内ですか...? ざっとですが、質問に追記したコードを想定しています(インデント等見づらくて申し訳ございません)。 アクティビティのリポジトリとレポート関連のリポジトリを分けた理由は、他の機能でもアクティビティの作成がされ得るためです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問