Основные операции CRUD с Codeigniter и Datamapper
Я абсолютно новичок в Codeigniter и Datamapper, и у меня есть очень фундаментальный вопрос, на который я не могу ответить сам, ища в документации.
У меня очень простая база данных с 3 таблицами:
student
courses
student_courses
Теперь я понимаю, как работают отношения, выполняются ли операции CRUD с CI и т. Д...... но как я могу стабилизировать отношения между студентами и курсами, используя форму, которую должен заполнить пользователь?
Представьте, что у меня есть форма, в которой пользователь должен заполнить имя учащегося и выбрать два или более курса... как должен выглядеть контроллер?
большое спасибо
1 ответ
Во-первых, используя Datamapper с CI, будет проще, если вы назовете таблицу "ученик" "ученики". Затем присоединиться к столу "courses_students" (спасибо Шона). Тогда вашими моделями будут "студент" и "курс".
Контроллер для формы может быть примерно таким (в идеале, вы бы поместили форму в View):
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 для сохранения массива в одном операторе, но мне нужно это изучить.