12

当我尝试保存时,我收到错误“无法刷新行,因为缺少父级”。这是我的代码

abstract class Webapp_Model_Resource_Db_Table_Abstract
extends Zend_Db_Table_Abstract
{
    /**
     * Save a row to the database
     *
     *
     * @param array             $info The data to insert/update
     * @param Zend_DB_Table_Row $row Optional The row to use
     * @return mixed The primary key
     */

    public function saveRow($info, $row = null)
    {         
        if (null === $row) {
            $row = $this->createRow();
        }
        $columns = $this->info('cols');
        foreach ($columns as $column) {
            if (array_key_exists($column, $info)) {
                $row->$column = $info[$column];
            }
        }

        return $row->save();
    }
}

当我调用 saveRow() 方法时,我传入 $_POST 值 ($form->getValues())

我已经在同一个应用程序中将这个类与我的其他模块一起重用了,但现在我收到了这个错误,我不知道为什么。我的桌子很简单:

CREATE TABLE `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `headline` varchar(100) DEFAULT NULL,
  `snippet` varchar(500) DEFAULT NULL,
  `full_text` text,
  `author` varchar(100) DEFAULT NULL,
  `publish_from` date DEFAULT NULL COMMENT 'Publish date',
  `publish_to` date DEFAULT NULL COMMENT 'Take it down or mark as draft after this date',
  `datecreated` timestamp NULL DEFAULT NULL COMMENT 'First created on',
  `revised` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp for the last time it was revised',
  `draft` tinyint(1) DEFAULT '0' COMMENT 'Should not be published',
  `departments_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8 COMMENT='Stores news articles';

有人知道我在做什么错吗?

::::::::::::::ADDTION::::::::::::::

public function saveNews($post,$defaults = array())
    {

       //get the form
        $form = $this->getForm('article' . ucfirst($validator));
        //validate
        if(!$form->isValid($post)) {
            return false;
        }


      //get fitered values
        $data = $form->getValues();
        //apply defaults
        foreach($defaults as $col => $value) {
            $data[$col] = $value;
        }

      //get the article if it exists
        $article = array_key_exists('id', $data) ?
                   $this->getNewsById($data['id']) : null;


        return $this->saveRow($data, $article);
}
4

5 回答 5

11

当您为主键传递一个空值时,Zend 似乎返回这个值而不是插入的自动增量值——即使使用自动增量值正确创建了一个新行,插入的值也不会返回。

也许您的问题与此有关。如果是这样,请尝试在保存之前取消设置 id 字段。

于 2010-09-04T21:57:14.163 回答
3

$_sequence您必须通过设置为true或序列名称来告诉 DbTable 有一个自动递增主键。

15.5.4.1。使用带有自动递增键的表

于 2011-10-28T11:34:36.690 回答
0

检查您的 $info 数组。可能你的主键有一些空值。所以 array_key_exists($column, $info) 返回 true 并且你为你的行分配一个空的主键。这会导致错误,因为具有此键的行不存在。

尝试

if (array_key_exists($column, $info) and $column != 'YOUR_PRIMARY_KEY_NAME') 
{
       $row->$column = $info[$column];
}
于 2010-11-18T15:55:02.450 回答
0

就我而言,问题是缺少 AUTO_INCREMENT。

于 2015-11-24T07:42:27.690 回答
-1

你能发布功能:

$this->getNewsById($id)

有你的问题...

于 2010-08-09T20:13:27.447 回答