2017-11-01 2 views
0

이 테이블은 Class, SchedulesAttendance입니다.updateOr 외래 키를 변경하려면 작성하십시오. 누락 된 경우

교수가 학생이 출석을 기록하지 못한 일정을 선택합니다. 이를 위해 그는 student_id, class_idschedule_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를 사용하는 요청에 나열되지 않은 모든 아이디의 삭제하여 많은 테이블에 많은 업데이트하려면

. 문서 링크 : https://laravel.com/docs/5.5/eloquent-relationships#inserting-and-updating-related-models -> 섹션 동기화 협회

또한 대다 연결을 구성하기 위해 동기화 방법을 사용할 수 있습니다. sync 메소드는 ID 배열을 받아 중간 테이블에 배치합니다. 지정된 배열에없는 ID는 중간 테이블에서 제거됩니다. 따라서이 작업이 완료되면 지정된 배열의 ID 만 중간 테이블에 존재하게됩니다.