0

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

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

我正在使用 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 中。

提前致谢。

4

1 回答 1

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))

在调用“保存”之前,您首先需要调用“创建” -

$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

于 2012-07-12T23:26:42.863 回答