Witam.
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)){
if(isset($post['subject'])){ foreach($post['subject'] as $k=>$v){
$student->save();
$student->students_subjects->student_id = $student->id;
}
$obj->status = 'ok';
}else{
$obj->status = 'error';
$obj->message = array('Przedmioty są wymagane!'); }
}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{
$.each(res.message, function(k, v){
html += '
<li>'+v+'
</li>';
});
$.colorbox({
html: html
});
}
}
})
})
Przy zapisywaniu studenta dostaję komunikat:
Właściwość students_subjects w klasie Student_Model nie istnieje.
W modelach:
Model Student:
protected
$has_and_belongs_to_many = array('subjects');
Model Subject:
protected
$has_and_belongs_to_many = array('students');
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.