鲜为人知的事实:蛋糕DOES将它们作为对象或井对象的属性返回。的阵列是语法糖:
// In your View:
debug($this->viewVars);
Shwoing $this
是一个视图对象和的viewVars
属性与来自控制器动作$this->set('key', $variable)
或$this->set(compact('data', 'for', 'view'))
对应。
为了击键而将它们压扁为$Post->id
的问题是Cake是为什么。 Cake的设计是一个沉重的举手,所以它的内置ORM是非常强大的,不可避免的,并且用于处理无穷大的无穷大关联表 - 自动回调,自动数据传递,查询生成等。多维数组的底层深度取决于在您的查找方法中,只要您处理多个具有多个关联模型的$ Post,例如,您已经将数组引入混合中,并且没有任何回避。
不同的find
方法返回不同深度的数组。从默认生成的控制器代码中,您可以看到该索引使用$this->set('posts', $this->paginate());
- 查看使用$this->set('post', $this->Post->read(null, $id));
并且编辑不会使用$this->set
并附带Post查找 - 它分配$this->data = $this->Post->read(null, $id);
。
FWIW,Set::map
可能会抛出那些undefined index
错误,因为(猜测)你碰巧试图映射编辑动作,amirite?默认情况下,编辑操作仅使用$this->set
将相关模型查找设置为视图。 $ this-> read的结果将发送到$this->data
。这可能是Set :: map失败的原因。无论哪种方式,你仍然最终瞄准$Post[0]->id
或$Post->id
(取决于你找到的方法你使用),这是没有太大的改善。
这里是集::地图()属性深度的这些行动的一些通用的例子:
// In posts/index.ctp
$Post = Set::map($posts);
debug($Post);
debug($Post[0]->id);
// In posts/edit/1
debug($this-viewVars);
debug($this->data);
// In posts/view/1
debug($this-viewVars);
$Post = Set::map($post);
debug($Post->id);
http://api13.cakephp.org/class/controller#method-Controllerset
http://api13.cakephp.org/class/model#method-Modelread
http://api13.cakephp.org/class/model#method-ModelsaveAll
HTH。
这工作!谢谢!它可能不像你所说的那么完美,但是这样我就可以访问数组和对象版本,如果我以某种方式需要它的话!谢谢 –