【问题标题】:Can You Access Model Data in Controller in CakePHP?您可以在 CakePHP 的控制器中访问模型数据吗?
【发布时间】:2010-09-19 16:13:46
【问题描述】:

这可能是一个愚蠢的问题,但我在任何地方都找不到明确的答案。是否可以在 Controller 中访问模型数据,如果可以,如何访问?

我尝试了以下方法:

$this->set('mydata', $this->Model->find('all', 'conditions' => array('id' => 'someID')));

并在控制器中通过 this 访问它:

$mydata['Model']['field']

但这似乎只适用于视图。

有没有办法访问控制器中的模型数据?原因是我需要对关联模型 (belongsTo) 执行无法通过隐藏字段或其他方式完成的计算,因为关联模型的 ID 直到提交表单后才会传递。

任何帮助将不胜感激!

【问题讨论】:

    标签: cakephp model controller


    【解决方案1】:

    嗯,怎么样:

    $myData = $this->Model->find('all', 'conditions' => /* ... */);
    
    $myData['Model']['field'];
    $myData['RelatedModel']['field'];
    
    $this->set('mydata', $myData);
    

    足够简单:)

    Model::find() 返回你的数据,你不需要直接传给Controller::set(),你可以先弄乱它,然后传给你的视图。

    但是,我建议不要这样做,最好有一个 Model::messWithData($data) 并让模型处理数据,让控制器处理应用程序逻辑。请记住,胖模型,瘦控制器

    【讨论】:

    • 感谢您的回复!我要做的是执行一个计算,该计算使用来自表单提交的一些数据并将其与来自关联的 belongsTo 模型的数据混合。你是说我应该在关联模型中有一个函数来执行计算,然后在控制器中调用它?
    • 取决于你想要做什么,但我的回答基本上是“是”。 :) 最好将更改数据的东西保留在模型中(这是它们的目的!),除非它只是您要在视图中显示的东西(即,如果它只是一个格式问题 - 在这种情况下,我'会使用一个自定义帮助器来准备数据以供显示)。
    • 谢谢 - 我已经开始在整个项目中实现这一点,并且在模型中包含所有数据库查询肯定会使代码更具可读性!
    • 很高兴我能帮上忙 :) Teknoid 为这个原理写了一个简单的解释:nuts-and-bolts-of-cakephp.com/2008/05/05/fatten-up-your-models 但是如果你在谷歌上查找它,还有很多其他关于蛋糕编码样式的提示和文章 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2022-01-23
    • 2017-02-06
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多