2013-11-20 56 views
0

在CakePHP的Model方法中,没有办法将Model实例作为对象(而不是数组)访问吗?作为一个超级简单例子,我的直觉告诉我,它应该是可以做这样的事情:从CakePHP中的控制器调用模型方法

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()); 
} 

。然后它在视图文件中显示为“哦,哇!它是鸟”而不是“哦,哇!它是弗雷迪”(即模型的名称,而不是模型实例的名称)。

我试过这种通用方法的变体,无济于事。看来我必须通过数组访问信息,如下所示:

Bird.php 
... 
public function specialName($id) 
{ 
    $data = $this->findById($id); 
    $name = $data['Bird']['name']; 
    return "Oh wow! It's ".$name; 
} 

这似乎对我来说太复杂了。我错过了什么?最终,我希望能够访问我的模型函数中的依赖模型,例如获取所有相关的鸟类 - >亚种。看起来这样做会更容易处理对象。

回答

0

如果您已阅读关于模型的文档,您将知道Model :: $ name是模型的名称。还有Model :: alias,它是在通过关联访问模型时的名称,并且关联的名称与模型名称不同。

Cakes ORM不会返回结果作为数据对象,3.0会这样做。最简单的方法,现在返回一个specifc场是做到这一点的模型:

public function specialName($id) { 
    $this->id = $id; 
    return $this->field('name'); 
} 

也是“哇哦......”应该去哪里查看,你会呼应你设置为$名称结果。

如果你想要数据对象,我知道有一个插件,一个将结果集转换为数据对象的行为。只是谷歌它。

最终,我希望能够访问我的模型 函数中的依赖模型,例如,获取所有相关的鸟类 - >亚种。

你读过这本书吗? See this sectionWith containable您可以控制您想要从关联模型中获取的内容。

我建议您首先阅读博客教程,以了解CakePHP的基本工作原理。

+1

嗨burzum。感谢您花时间解决我的问题。是的,我花了不少时间阅读文档,并且编写了博客教程。我了解如何创建相关模型;我的问题是如何最好地访问数据。根据我对另一个PHP框架的经验,我曾预期将结果作为数据对象返回,但是您已经向我确认,如果不使用插件,则当前版本的Cake不可能。 – codebird

相关问题