2009-07-23 7 views
5

Lors de l'exécution de requêtes UPDATE et INSERT à l'aide de Zend_Db, j'ai souvent besoin de définir des valeurs égales à NULL (pas ''). Cependant, le comportement par défaut de Zend_Db :: insert() et Zend_Db :: update() semble être que les valeurs vides sont traduites en chaînes vides ('') et mises dans la base de données en tant que telles.Comment définir une valeur à NULL lors de l'utilisation de Zend_Db

Est-ce que quelqu'un sait de façon à forcer réellement une valeur NULL à aller dans les champs si la valeur est vide dans PHP?

Répondre

19

Essayez de définir les champs affectés à: new Zend_Db_Expr('NULL')

+1

J'aime cette méthode pour la _abstraction_ que cette méthode pour vous donner –

4

J'ai toujours juste été en mesure de le faire en utilisant null de PHP:

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

Comme Johrn j'ai pu le faire avec null PHP valeur:

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

mais a rencontré des situations où la base de données elle-même avait la colonne définie sur NOT NULL et dans ce c ases la valeur a bien été convertie en une chaîne vide ou en cas de FLOATs à 0.00. Je suppose que la colonne INT finirait par 0 ;-)

0

En utilisant Zend 2.4.7 pour ceux qui pourraient être en train de visiter ce numéro, j'ai pu utiliser cette réponse avec la réponse de William Lannen en m'inspirant. En supposant getTable() retourne un objet 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; 
    } 
}