在CakePHP的Model方法中,是否无法将Model实例作为对象(而不是数组)进行访问?作为一个超级简化的例子,我的直觉告诉我应该做这样的事情:
Bird.php
...
public function specialName()
{
$name = $this->name;
return "Oh wow! It's ".$name;
}
如果我从我的BirdController.php中调用此方法,如下所示:
public function view($id) {
if (!$id) {
throw new NotFoundException(__('Invalid bird'));
}
$this->Bird->id = $id;
$this->set('results', $this->Bird->specialName());
}
...然后它在视图文件中显示为“哦哇!它是鸟”而不是“哦哇!它是Freddy”(即模型的名称,而不是模型实例的名称)。
我尝试过这种一般方法的变体,但无济于事。我似乎必须通过数组访问信息,如下所示:
Bird.php
...
public function specialName($id)
{
$data = $this->findById($id);
$name = $data['Bird']['name'];
return "Oh wow! It's ".$name;
}
这对我来说似乎过于复杂。我错过了什么?最终,我希望能够在我的模型函数中访问依赖模型,例如得到所有相关的鸟类>亚种。看起来使用对象会更容易。
答案 0 :(得分:0)
如果您已阅读有关模型的文档,您会知道Model :: $ name是模型的名称。还有Model :: alias,它是通过关联访问模型时的模型名称,并且该关联的名称与模型名称不同。
Cakes ORM不会将结果作为数据对象返回,3.0会这样做。现在返回特定字段的最简单方法是在模型中执行此操作:
public function specialName($id) {
$this->id = $id;
return $this->field('name');
}
此外,“哦哇......”应该转到您将回显您设置为$ result的名称的视图。
如果你想要数据对象,我知道有一个插件,一种将结果集转换为数据对象的行为。只是谷歌吧。
你读过这本书了吗? See this section。 With containable您可以控制从关联模型中获取的确切内容。最终我希望能够在我的模型中访问依赖模型 功能,例如得到所有相关的Bird->亚种。
我建议您先做博客教程,了解CakePHP的基本工作原理。