2011-02-07 3 views
2

저는 Codeigniter 및 Datamapper에서 완전히 새로 왔으며 문서에서 검색 할 때 스스로 대답 할 수없는 매우 근본적인 질문을 가지고 있습니다. 내가 등 CI와 CRUD 작업을 수행의 관계를 어떻게 작동하는지 이해, 이제Codeigniter 및 Datamapper를 사용한 기본 CRUD 작업

student 
courses 
student_courses 

.....하지만 내가 어떻게 관계를 stablish 수 있습니다

나는 3 개 테이블과 매우 간단한 데이터베이스가 학생과 코스는 사용자가 작성해야하는 양식을 사용합니까?

내가 사용자가 학생의 이름을 기입하고 두 개 이상의 코스를 선택해야하는 양식이 있다고 상상해보십시오 ... 컨트롤러가 어떻게 보이게해야합니까?

당신에게 대단히 감사합니다 당신이 '학생'테이블 '학생'라는 이름의 경우 우선은, CI와 Datamapper를 사용하여 쉽게 될 것입니다

답변

3

. 그런 다음 조인 테이블 'courses_students'(감사 Shauna). 모델은 '학생'과 '코스'가됩니다.

function form() { 
    echo "<form method='post' action='submitForm'>"; 
    echo "<input type='text' name='student_name'>"; 
    echo "<select name='courses[]' multiple='multiple'>"; 
    $c = new Course(); 
    $c->get(); 
    foreach($c as $course) { 
     echo "<option value='{$course->id}'>{$course->name}</option>"; 
    } 
    echo "</select>"; 
    echo "<input type='submit' value='Submit'>"; 
} 

(검증 또는 XSS 검사없이) 양식을 제출하는 컨트롤러 :

형태의 컨트롤러는 다음과 같이 (이상적으로, 당신이보기에서 폼을 넣어 것)을 할 수

function submitForm() { 
    $s = new Student(); 
    $s->name = $this->input->post('student_name'); 
    // an initial save to the Students table, might be omitted 
    $s->save(); 
    $course_array = $this->input->post('courses'); 
    // loop through the Courses, get them from db, and save the relationship 
    foreach($course_array as $k=>$v) { 
      $c = new Course($v); 
      $s->save($c); 
    } 
} 

몇 가지주의 사항 : 빠르고 더러운 예입니다. 이러한 여러 저장 작업을 수행하면 많은 과정을 선택하면 작업 속도가 느려질 수 있습니다. 한 가지 진술로 Datamapper를 사용하여 배열을 저장하는 방법이 있지만 그 부분을 조사해야합니다.

+1

CI Datamapper는 알파벳 순으로 이름을 찾아 가입 테이블을 찾는다. 따라서 실제로는 가입 테이블 이름에'courses_students'가 필요합니다. – Shauna

+0

좋은 지적. 나는 그것에 대해 생각하고 있지 않았다. – TerryMatula