2016-01-06 17 views
5

İki tablom var. Birincil tablom Öğrenciler. Ve ikincil tablomuz Sınavları. Ben hasMany ve belongsToMany Derneği kullanarak tabloları kaydetmeye çalışıyorum. Ancak, Öğrenci tablosundaki verileri, Exams'da kaydetmiyor. Bu sorunu çözmek için bana yardımcı olabilir.HasMany İlişkilendirmeleri Verilerini CakePHP'ye Kaydetme 3.x

Öğrenci Modeli:

class StudentsTable extends Table { 
    public function initialize(array $config) { 
    $this->addBehavior('Timestamp'); 
    parent::initialize($config); 
    $this->table('students'); 
    $this->primaryKey(['id']); 
    $this->hasMany('Exams', [ 
     'className' => 'Exams', 
     'foreignKey' => 'student_id', 
     'dependent'=>'true', 
     'cascadeCallbacks'=>'true']); 
    } 
} 

Sınavlar Modeli:

class ExamsTable extends Table { 
    public function initialize(array $config) { 
    parent::initialize($config); 
    $this->table('exams'); 
    $this->primaryKey(['id']); 
    $this->belongsToMany('Students',[ 
     'className'=>'Students', 
     'foreignKey' => 'subject_id', 
     'dependent'=>'true', 
     'cascadeCallbacks'=>'true']); 
    } 
} 

Benim school.ctp: Benim denetleyicisi olarak

echo $this->Form->create(); 
echo $this->Form->input('name'); 
echo $this->Form->input('exams.subject', array(
    'required'=>false, 
    'multiple' => 'checkbox', 
    'options' => array(
    0 => 'Tamil', 
    1 => 'English', 
    2 => 'Maths'))); 
echo $this->Form->button(__('Save')); 
echo $this->Form->end(); 

:

public function school() { 
    $this->loadModel('Students'); 
    $this->loadModel('Exams'); 
    $student = $this->Students->newEntity(); 
    if ($this->request->is('post')) { 
    $this->request->data['exams']['subject'] = 
     implode(',',$this->request->data['exams']['subject']); 
    $student = $this->Students->patchEntity(
     $student, $this->request->data, ['associated' => ['Exams']] 
    ); 
    if ($this->Students->save($student)) { 
     $this->Flash->success(__('The user has been saved.')); 
    } else { 
     $this->Flash->error(__('Unable to add the user.')); 
    } 
    } 
} 
+0

Varlık yamalandıktan sonra ** $ student-> getErrors() ** çıktısı nedir? – styks

cevap

0

Sınavları yapabileceğinizden emin olmanız gerekir. Set accessibleFields sen de varlıktaki $ _accessible özelliği ile yapabilirsiniz ilişkili verileri

$student = $this->Students->patchEntity(
    $student, $this->request->data, [ 
     'associated' => ['Exams'], 
     'accessibleFields' => ['exams' => true] 
    ] 
); 

yama izin vermek.

İlgili konular