Piszę aplikację we frameworku Kohana 2.3.4 używając ORM i AJAX.
Mam problem z zapisaniem danych dotyczących poszczególnych tabel w tabeli łączącej.
W bazie mam 3 tabele:
1. subjects (id, name) 2. students (id, name) 3. subjects_students (id, student_id, subject_id)
Dodając nowego studenta przypisuję mu kilka przedmiotów. Później AJAXem wysyłam zapytanie, jeśli jest ok to zapisuje studenta (co ozacza, że mam jego ID).
Metoda zwracająca dane:
public function add_student_ajax() { $this->auto_render = false; $student = ORM::factory('student'); $post = $_POST; $obj = new stdClass(); // Walidacja dotyczy tylko imienia, nazwiska itd, a nie przedmiotów if($student->validate($post)){ foreach($post['subject'] as $k=>$v){ $student->save(); $student->students_subjects->student_id = $student->id; } $obj->status = 'ok'; }else{ $obj->status = 'error'; } }else{ $obj->status = 'error'; $obj->message = $post->errors('student'); } }
I zapytanie AJAXowe:
$('.form_submit').click(function(e){ e.preventDefault(); $.ajax({ url: '<?php echo url::site('items/add_student_ajax') ?>', type: 'post', data: $('#myform').serialize(), dataType: 'json', success: function(res){ if(res.status == 'ok'){ $.colorbox({ html: 'Zapisano', onClosed: function(){ location.href = '<?php echo url::site('items/students') ?>' } }); }else{ var html = '<ul>'; $.each(res.message, function(k, v){ }); html += '</ul>'; $.colorbox({ html: html }); } } }) })
Przy zapisywaniu studenta dostaję komunikat:
Właściwość students_subjects w klasie Student_Model nie istnieje.
W modelach:
Model Student: Model Subject:
W tabeli Student zapisują się studenci, a w tabeli Subjects zapisują się przedmioty. Nie mam pojęcia natomiast jak w tabeli pośredniej zapisać te dane.