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方式。@塞格请随意将德霍夫斯特的答案标记为正确,而不是我自己的答案,因为他的方式更好。