Невозможно обновить строку, так как родитель отсутствует. Zend Framework - PullRequest
12 голосов
/ 09 августа 2010

Я получаю сообщение об ошибке «Не удается обновить строку, так как родитель отсутствует» при попытке сохранить.Вот мой код

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

Ответы [ 5 ]

11 голосов
/ 05 сентября 2010

Когда вы передаете пустое значение для первичного ключа, Zend, похоже, возвращает это значение вместо вставленного значения автоинкремента - даже если новая строка создается правильно со значением автоинкремента, вставленное значение не будет вернулся.

Может быть, ваша проблема связана с этим. Если это так, попробуйте сбросить поле id перед сохранением.

3 голосов
/ 28 октября 2011

Вы должны сообщить DbTable, что существует автоинкрементный первичный ключ, задав для $_sequence либо true, либо имя последовательности.

15.5.4.1.Использование таблицы с автоинкрементным ключом

0 голосов
/ 24 ноября 2015

В моем случае проблема отсутствовала. AUTO_INCREMENT.

0 голосов
/ 18 ноября 2010

Проверьте ваш массив $ info. Возможно, у вас есть какое-то пустое значение для вашего первичного ключа. Таким образом, array_key_exists ($ column, $ info) возвращает true, и вы присваиваете пустой первичный ключ вашей строке. И это вызывает ошибку, поскольку строка с этим ключом не существует.

попробуй

if (array_key_exists($column, $info) and $column != 'YOUR_PRIMARY_KEY_NAME') 
{
       $row->$column = $info[$column];
}
0 голосов
/ 10 августа 2010

Не могли бы вы опубликовать функцию:

$this->getNewsById($id)

Есть ваша проблема ...

...