Zend框架保存而不是插入更新

时间:2014-01-16 06:18:18

标签: php mysql zend-framework

我想使用save方法来保存表单数据。但是当我调用save on object时,它会给出以下错误。如果我在对象上调用insert方法,它工作正常。 致命错误:调用未定义的方法

第44行的/var/www/html/ZendTecAdmin/application/controllers/AdminController.php中的Application_Model_Content :: save()

以下是我的控制器操作代码

$content  = new Application_Model_Content();
          if($this->_request->getParams('id')){
            $id =  $this->_request->getParams('id');  
            $row = $content->find($id)->toArray();   
            if($row){
            $form->populate($row[0]);
            }
           }

    if ($this->_request->getPost('Publish')) {
                $formData = $this->_request->getPost();           
                if ($form->isValid($formData)) { //If form data is valid  
                    unset($formData['Publish']);                
                    $content->save($formData);
                   //$content->insert($formData); //it works fine
                }
            }

以下是我的模特

<?php
class Application_Model_Content extends Zend_Db_Table
{
   protected $_name = "content";

}

请帮我解决。

2 个答案:

答案 0 :(得分:1)

您可以获取Row对象并在其上使用save():

$select = $content->select()->where('id = ?',$id);
$row = $content->fetchRow($select);
$row->name = 'John'
$row->birthdate = 1980-11-04;
$row->save();

要扩展Row Class,您可以将protected $_rowClass = 'Application_Model_Row_User';添加到模型中,然后创建class Application_Model_Row_User extends Zend_Db_Table_Row_Abstract。 现在,您可以将自己的方法添加到此类中,如下所示:

public function dateToAge(){
    return (int)floor( (strtotime(date('Y-m-d')) - strtotime($this->birthdate)) / 31556926);
}

以后:

$select = $content->select()->where('id = ?',$id);
$row = $content->fetchRow($select);
$name = $row->name
$age = $row->dateToAge();

您可以在此处阅读更多内容:http://framework.zend.com/manual/1.12/en/zend.db.table.row.html

答案 1 :(得分:0)

如果在模型内容中编写代码,则可以正常工作

<?php

class Application_Model_Content extends Zend_Db_Table {

    protected $_name = "content";

    function save($data) {

        if (null === ($id = $data['id'])) {
            unset($data['id']);
            $this->insert($data);
        } else {
            $this->update($data, array('id = ?' => $id));
        }
    }

}

有没有其他标准方法可以做到这一点?