在非对象上调用成员函数create()

时间:2012-10-03 15:00:19

标签: mysql cakephp controller

我正在尝试在名为tutors的表上创建新记录。我这样命名是为了遵循CakePHP惯例。

$codigoAlumnoNuevo = $this->Persona->id;
$tipoPersona = $this->request->data('TipoPersona'); # Just grabbing a POSTED value.

switch ($tipoPersona) {
    case '0': # Es Tutor
        $this->Tutor->create();
        $this->Tutor->PersonaId = $codigoAlumnoNuevo;
        $this->Tutor->save();
        die("Saved record");
        break;

    case '1': # Es Alumno
        $this->Tutor->create();
        $this->Tutor->PersonaId = $codigoAlumnoNuevo;
        $this->Tutor->save();
        die("Saved record");
    break;

    case '2': # Es Coordinador de Programa
        $this->Tutor->create();
        $this->Tutor->PersonaId = $codigoAlumnoNuevo;
        $this->Tutor->save();
        die("Saved record");
    break;

    default:
        break;
}

尝试运行此代码时,会触发以下异常:

  

在非对象

上调用成员函数create()

如果我试试这个,我可以看到$this->Tutor为NULL:

var_dump($this->Tutor);

但是在同一个控制器中,我可以打电话给$this->Persona->create();就好了; $this->Persona不为空。为什么是这样?为什么Persona可用但不是Tutor?

这是命名吗?

这是我的数据库模型:

enter image description here

2 个答案:

答案 0 :(得分:1)

PersonasController开始,您默认只能访问Persona模型。

如果您想在Tutor模型上运行创建,则需要将var $uses = array('Persona','Tutor');添加到PersonasController.php的开头,如下所示:

<?php
class PersonasController extends AppController {
    var $uses = array('Persona','Tutor');

    ....functions.....

}
?>

答案 1 :(得分:1)

如果您在hasMany模型中的PersonaTutor之间定义了Persona关系,则可以使用Tutor访问$this->Persona->Tutor->create()模型并且不需要约瑟夫答案中的$uses数组。