【问题标题】:Create an instance of a Model in its Controller在其控制器中创建模型的实例
【发布时间】:2012-07-13 07:26:42
【问题描述】:

这可能是一个简单的问题,但我很难尝试创建模型的对象。我想创建一个与模型相同的临时变量,以便可以根据发布到操作的数据更新其内部值。

我的数据已成功发布到控制器中的操作。 目前我正在做的是抓取数据库中的所有项目,然后将其分配给数组中的第一个项目。这样我可以覆盖现有的值,但如果表是空的,它将无法工作。

我正在使用 cakephp 2.x,我是新手,这将解释为什么我无法弄清楚。

这是来自控制器的代码:

public function lcadd()
    {
        if ($this->request->is('post'))
        {
            // Create a new Local Clock object
            $temp = $this->LocalClock->find('all'); // THIS IS THE PROBLEM AREA
            $temp = $temp[0];

            $temp['LocalClock']['name'] = $this->request->data['LocalClock']['Name'];
            debug($temp);  // THIS DEBUG ONLY DISPLAYS SOMETHING IF THE DATABASE TABLE IS NOT EMPTY

            debug($this->request->data);  // THE DATA COMING IN IS CORRECT AND I CAN ACCESS IT WITHOUT A PROBLEM

            if($this->request->data['LocalClock']['Time Zone'] == 0 or $this->request->data['LocalClock']['Time Zone'] == -1)
            {
                //debug('Hello');
                $temp['LocalClock']['auto_offset'] = 1;
            }
            else if($this->request->data['LocalClock']['Time Zone'] == 1)
            {
                $temp['LocalClock']['auto_offset'] = 0;
            }

            // Check the value posted from the DST
            if($this->request->data['LocalClock']['DST Definition'] == -1 or $this->request->data['LocalClock']['DST Definition'] == 0)
            {
                $temp['LocalClock']['in_month'] = 0;
            }
            else if($this->request->data['LocalClock']['DST Definition'] == 2)
            {
                $temp['LocalClock']['in_month'] = $this->request->data['LocalClock']['InMonth'];
            }

            if ($this->LocalClock->save($temp))
            {
                $this->set('localClocks', $this->request->data);
                $this->set('islcAddValid', true);
                $this->set('lcaddValidationErrors', false);
            }
        }
    }

我不知道如何从模型中制作一个简单的对象。模型是LocalClock,控制器是LocalClocksController。 上面的函数在LocalClocksController中。

提前致谢。

【问题讨论】:

    标签: cakephp object model controller


    【解决方案1】:

    我注意到的一些事情......

    第一期:

    // Create a new Local Clock object
    $temp = $this->LocalClock->find('all'); // THIS IS THE PROBLEM AREA
    $temp = $temp[0];
    

    这不是创建一个新的本地时钟对象。第一行返回一个包含本地时钟数据库表中所有记录的数组(即,不是对象)。然后,第二行显示“获取结果的第一行,并将其存储在 $temp 中”。所以,现在 $temp 保存了一个数组(仍然不是对象),其中包含 LocalClock 表中第一条记录的数据。

    不过,您实际上并不需要对象,因为您稍后调用的“保存”方法不接受对象——它只接受数据数组。您也不需要从数据库中获取任何内容来保存新记录。所以上面的代码应该替换为:

    $temp = array(); // Create an empty array. We will populate it as we go, with the data for the new record.
    

    在您尝试保存记录之前,方法中间的所有内容都应该可以正常工作。

    第二期:

    if ($this->LocalClock->save($temp))
    

    在调用'save'之前,你首先需要调用'create' -

    $this->LocalClock->create(); // prepare the Model to save a new record
    if ($this->LocalClock->save($temp)) // This should now save a new record successfully.
    

    有意义吗?如果您还有其他问题,请告诉我。

    此外,了解如何从模型中检索、操作和保存数据对于使用 CakePHP 非常重要,如果您从一开始就学会如何正确地进行操作,那么您将来会为自己省去无数个小时的挫败感。我建议端到端阅读以下页面:

    1. http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

    2. http://book.cakephp.org/2.0/en/models/saving-your-data.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2013-03-22
      • 2011-05-03
      相关资源
      最近更新 更多