0

Laravel のコードについて少し混乱しています。1 つまたは複数のレッスンを購読できるメンバーがいます。members、lessons、lesson_member の 3 つのテーブルがあります。

メンバー フォームを作成し、このフォームからメンバーをレッスンに登録できます (レッスン ID を取得する必要があり、ピボット テーブルにレコードを配置します)。

次に、レッスンフォームがあります。新しいレッスンを作成し、1 つ以上のメンバーを配置できます (この場合、メンバー コードが必要です)。これら 2 つの関数はほぼ同じですが、パラメーターが異なります。私のソリューションでは、2 つの異なる機能を持つ 2 つの異なるコントローラーを作成しました。

レッスンコントローラー

<?php

public function addMember(Request $request)
{
    $lessonMember = new LessonMember();
    $lessonId = $request->session()->get('lessonId', 1);

    if ((!($lessonMember::where('lesson_id', '=', $lessonId)
        ->where('license_member_id', '=', $request->memberId)
        ->exists()))) {
        $lessonMember->lesson_id = $lessonId;
        $lessonMember->license_member_id = $request->memberId;
        $lessonMember->save();
        $member = LicenseMember::find($request->memberId)->member;

        return response()->json(['user_saved' => $member, 'llm' => $lessonMember, 'actualMembers' => $actualMembers]);
    }
}

メンバーコントローラー

<?php

public function addLesson(Request $request)
{
    $lessonMember = new LessonMember();
    $memberId = $request->session()->get('memberId', 1);

    if ((!($lessonMember::where('lesson_id', $request->lessonId)
        ->where('license_member_id', $memberId)
        ->exists()))) {
        $lessonMember->lesson_id = $request->lessonId;
        $lessonMember->license_member_id = $memberId;
        $lessonMember->save();
        $member = LicenseMember::find($memberId)->member;

        return response()->json(['user_saved' => $member, 'llm' => $lessonMember]);
    }
}

removeFromLesson() メソッドと updateLessonMember メソッドで同じ問題がありますが、解決策は似ているはずです。それは確かにDRYではなく、モデル(または他の場所)にコードを配置する必要があると思いますが、続行する方法がわかりません。クリーンなソリューションを得るためにリファクタリングしたい。特性について読みましたが、それが正しい方法かどうかわかりません。

4

1 に答える 1