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

Mysql 对非对象调用成员函数create(),mysql,cakephp,controller,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->

我正在尝试在名为
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
为空:

var_dump($this->Tutor);
但是在同一个控制器中,我可以调用
$this->Persona->create()刚刚好<代码>$this->Persona
不为空。为什么会这样?为什么角色可用,但不是导师

这是命名问题吗

以下是我的数据库模型:


默认情况下,从
角色控制器
只能访问
角色
模型

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

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

    ....functions.....

}
?>


如果您在
角色
模型中定义了一个
角色
导师
之间有许多关系,那么您可以使用
$this->Persona->Tutor->create()
访问
导师
模型,并且不需要Joseph回答中的
$uses
数组。

谢谢您的工作。值得注意的是,在使用
$uses
时,我似乎还被迫引用需要使用的其他表,包括以前默认的“Persona”模型表。所以应该是:
var$uses=array('Tutor','Persona')好的观点——我已经更新了答案,以反映这一点,以防其他人阅读它而没有注意到您的评论:-)这很好。这就是a-láRuby on Rails?你能给我一个相关文档的链接吗?谢谢我想我更喜欢RoR方式。@塞格请随意将德霍夫斯特的答案标记为正确,而不是我自己的答案,因为他的方式更好。