Wampamba
Wampamba

Reputation: 27

CakePHP why is associated null?

I have several tables and corresponding models, that is to say, Staffs, Dpmembers, Subjects and Positions tables. In my Staff model I create hasOne on Department because I want to retrieve data from Department table which is working.

But I have also created more associations of hasMany on Dpmember, Subject and Position models because I want to save the corresponding staff records.

The view newstaff.ctp looks like this

<div class="staff form">

<?php echo $this->Form->create('Staff');?>
<h3><?php echo __('Add a new staff member'); ?></h3>
<?php 

echo $this->Form->input('name');
echo $this->Form->input('marital',array('label'=>'Marital status','options'=>array('empty'=>'Choose status','Single'=>'Single','Divorced'=>'Divorced','Married'=>'Married')));
echo $this->Form->input('Children');
echo $this->Form->input('nationality');
echo $this->Form->input('location');
echo $this->Form->input('email');   
echo $this->Form->input('phone',array('label'=>'Phone number'));
echo $this->Form->input('nextofkeen',array('label'=>'Next of keen'));
echo $this->Form->input('keenrelation',array('label'=>'Next of keen relationship','options'=>array('Choose option'=>'Choose option','Husband'=>'Husband','Wife'=>'Wife','Guardian'=>'Gaurdian','Child'=>'Child')));
echo $this->Form->input('school');
echo $this->Form->input('award');
echo $this->Form->input('schoolperiod');
echo $this->Form->input('workplace',array('label'=>'Workplace'));
echo $this->Form->input('workposition');
echo $this->Form->input('workperiod');
echo $this->Form->input('dpmember.department.',array('options'=>$department,'empty'=>'Choose Department','label'=>'Department'));
echo $this->Form->input('subject.subjcet',array('options'=>array('Choose option'=>'Choose option','Science'=>'Science','Social Studies'=>'Social studies','English'=>'English','Mathematics'=>'Mathematics'),'label'=>'Subject'));
echo $this->Form->input('position.role',array('options'=>array('Choose option'=>'Choose option','Class teacher'=>'Class teacher','Bursar'=>'Bursar','Cook'=>'Cook'),'label'=>'Position'));
echo $this->Form->submit('Save staff', array('class' => 'btn btn-success',  'title' => 'Click here to add the user') ); 
?>
<?php echo $this->Form->end(); ?>
</div>

My Staff Model Staff.php like this

<?php
    class Staff extends AppModel{
        public $hasOne = array(
            'Department'=>array(
                'className'=>'Department'
                ));
        public $hasMany = array(
            'Dpmember'=>array(
                'className'=>'Dpmember',
                'foreign_key'=>'Dpmember.staff_id'
                ),
            'Subject'=>array(
                'className'=>'Subject',
                'foreign_key'=>'Subject.staff_id'
                ),
            'Position'=>array(
                'className'=>'Position',
                'foreign_key'=>'Position.staff_id'
                )
            );      
    }
?>

In my StaffsController.php I have a function newstaff() with the code below

public function newstaff() {
    /*Create a select form field for departments */
    $department = $this->Staff->Department->find('list',array('fields'=>array('Department.title','Department.title')));
    $this->set('department', $department);
    /*End creation of a select form field for departments */

    if (!empty($this->request->data)) {
        debug($this->request->data); // returns all data
        debug($this->Staff->Subject->subject); // has returned null
        debug($this->Staff->Position->position); // has returned null
        debug($this->Staff->Dpmember->departement); // has returned null
        }
}

I don't know why but for some reason, I have not been able to found out. Running debug($this->request->data) returns expected data.

But accessing individual associated form fields returns null values not the expected data. Please help me.

Thank you

Upvotes: 1

Views: 121

Answers (2)

Wampamba
Wampamba

Reputation: 27

Well I think finally I have got the values which are not null. Since I created relationships or rather associations among the models and am using CakePHP 2.3 the right way is

$this->request->data['associateModel']['FormField'];

Therefore I was supposed to do.

$this->request['Subject']['subject']; $this->request['Subject']['position']; $this->request['Subject']['department'];

Thank you very much @Oldskool

Upvotes: 1

Oldskool
Oldskool

Reputation: 34837

You seem to be using CakePHP 3.0 syntax, while using CakePHP 2.3. The data returned is an array in Cake 2, not an object. So the data is under array keys, like:

$this->request->data['Staff']['Subject']['subject'];
$this->request->data['Staff']['Position']['position'];
$this->request->data['Staff']['Dpmember']['departement'];

Upvotes: 1

Related Questions