2017-11-01 5 views
0

私はこれら3つのテーブル:Class,SchedulesおよびAttendanceを持っています。updateOr外部キーを変更するために作成し、存在しない場合は、ドロップ

教授が出席を記録するために欠席したスケジュールを選択します。これを行うには、student_idclass_idおよびschedule_idを返すチェックボックスを使用します。教授が出席を変更するたびに、schedule_idを変更する必要があります。彼は非出席をキャストするとき

問題がある(「この学生は、このスケジュールで私のクラスを逃した」)が、その後、それを元に戻したい(が「この生徒は、このスケジュールでクラスを逃していない、私の間違い ")、教授は出席を取り除き、schedule_idを削除する必要があります。

updateOrCreateメソッドのリクエストにschedule_idがない場合、外部キーを削除する方法を見つける方法が必要です。

出席キャストコントローラ:あなたが必要と設定することができ、あなたのチェックボックスの値をチェックすることによって

Class->hasMany->attendances(). Attendances->hasMany->schedules. 

答えて

0

foreach ($attendances as $f){ 
    $class->attendances()->updateOrCreate(
      [ 
       'class_id' => $f['class_id'], 
       'student_id' => $f['student_id'], 
      ],[     [ 
       'schedule_id' => $f, 
      ] 
    ); 
} 

クラスモデル:

public function attendances() 
{ 
    return $this->hasMany(Attendance::class); 
} 

関係をこのユースケースの行動。

if (Request::get('mycheckbox')) { 
    // got schedule_id 
    // Insert/Update Record 
} else { 
    // Don't have schedule_id 
    // Delete Record 
    Schedules::destroy($id); 
} 

あなただけのもうsyncを使用し、要求に記載されていないすべてのIDを削除することにより、多くのテーブルに多くを更新する場合。ドキュメントのリンク:https://laravel.com/docs/5.5/eloquent-relationships#inserting-and-updating-related-models - >セクションの同期協会

また、多対多の関連を構築するための同期方法を使用することができます。 syncメソッドはIDの配列を受け取り、中間テーブルに配置します。指定された配列にないIDは中間テーブルから削除されます。したがって、この操作が完了すると、指定された配列のIDのみが中間テーブルに存在します。

関連する問題