zend-framework - udemy - zend framework 2018
No se puede actualizar la fila ya que falta el padre. Zend Framework (5)
Me aparece el error "No se puede actualizar la fila como padre falta" cuando intento guardar. Aquí está mi código
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();
}
}
cuando llamo al método saveRow (), paso los valores $ _POST ($ form-> getValues ())
He reutilizado esta clase con mis otros módulos en la misma aplicación, pero ahora recibo este error y no estoy seguro de por qué. Mi mesa es bastante directa:
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'';
¿Alguien sabe lo que estoy haciendo mal?
:::::::::::::: 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);
}
¿Podría publicar la función?
$this->getNewsById($id)
Ahí está tu problema ...
Cuando pasa un valor vacío para la clave principal, Zend parece devolver este valor en lugar del valor de autoincrecimiento insertado; aunque una nueva fila se crea correctamente con un valor de incremento automático, no se devolverá el valor insertado.
Tal vez su problema está relacionado con esto. Si es así, intente desarmar el campo de identificación antes de guardar.
Verifica tu matriz de $ info. Probablemente tengas algún valor vacío para tu clave principal allí. Entonces array_key_exists ($ column, $ info) devuelve true y asigna una clave primaria vacía a su fila. Y esto causa el error ya que la fila con esta clave no existe.
tratar
if (array_key_exists($column, $info) and $column != ''YOUR_PRIMARY_KEY_NAME'')
{
$row->$column = $info[$column];
}
Debe decirle a DbTable que hay una clave principal de incremento automático al configurar $_sequence
en true
o en el nombre de secuencia.
15.5.4.1. Usar una tabla con una clave de incremento automático
En mi caso, el problema faltaba AUTO_INCREMENT.