2009-07-23 13 views
5

Al realizar las consultas UPDATE e INSERT usando Zend_Db, con frecuencia necesito establecer valores iguales a NULL (no ''). Sin embargo, el comportamiento predeterminado de Zend_Db :: insert() y Zend_Db :: update() parece ser que los valores que están vacíos se traducen en cadenas vacías ('') y se colocan en la base de datos como tal.Cómo establecer un valor en NULL cuando se usa Zend_Db

¿Alguien sabe de manera de forzar realmente un valor NULO para ir a los campos si el valor está vacío en php?

Respuesta

19

Intenta definir los campos afectados a: new Zend_Db_Expr('NULL')

+1

Me gusta este método para la _abstraction_ que este método da a usted –

4

Siempre he sido capaz de hacer esto utilizando nula de PHP:

$toUpdate = array('nullValue' => null, 'otherValue' => 'something'); 
Zend_Db::update($table, $toUpdate, $where); 
1

Como Johrn que era capaz de hacer esto con el nula de PHP valor:

$value = null; 
$what = array($columnName => $value); 
$where = $this->_dbTableName->getAdapter()->quoteInto('Id = ?', $dbRecord->Id); 
$this->_dbTableName->update($what, $where); 

pero se encontraron situaciones en las que la base de datos tenía la columna establecida en NOT NULL y en tal c El valor se convirtió de hecho en cadena vacía o en el caso de FLOAT en 0.00. Supongo que la columna INT terminaría como 0 ;-)

0

Al usar Zend 2.4.7 para aquellos que pueden estar visitando este tema, pude usar esto con la respuesta de William Lannen que me inspiró. Suponiendo getTable() devuelve un objeto Zend\Db\TableGateway:

public function fetch() 
{ 
    $data['column_name1 = ?'] = 'column_value'; 
    $data[] = new \Zend\Db\Sql\Predicate\IsNull('column_name2'); 
    $resultSet = $this->getTable()->select($data); 
    if (0 === count($resultSet) { 
     return 'SomeExpectationOrException'; 
    } else { 
     return $resultSet; 
    } 
} 
Cuestiones relacionadas