这可能是一个简单的问题,但我很难尝试创建模型的对象。我想创建一个与模型相同的临时变量,以便根据我发布到操作的数据更新其内部值。
我的数据已成功发布到控制器中的操作。 目前我正在做的是抓取数据库中的所有项目,然后从数组中分配第一项。这样我就可以覆盖现有值,但是如果表是空的,它将无效。
我正在使用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中。
提前致谢。
答案 0 :(得分:1)
我注意到的一些事情......
第一个问题:
// Create a new Local Clock object
$temp = $this->LocalClock->find('all'); // THIS IS THE PROBLEM AREA
$temp = $temp[0];
那不是创建一个新的本地时钟对象。第一行返回一个包含本地时钟数据库表中所有记录的数组(即非对象)。然后,第二行显示'取结果的第一行,并将其存储在$ temp'。所以,现在$ temp包含一个数组(仍然不是一个对象),包含LocalClock表中第一个记录的数据。
但实际上你不需要一个对象,因为你稍后调用的'save'方法不接受一个对象 - 它只接受一个数据数组。您也不需要从数据库中获取任何内容以保存新记录。所以上面的代码应替换为:
$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非常重要,如果你从一开始就学会了如何正确地做到这一点,你将来会为自己节省无数个小时的挫败感。我建议端到端阅读以下页面: