2009-07-23 11 views
5

Wenn ich UPDATE- und INSERT-Abfragen mit Zend_Db durchführe, muss ich häufig Werte gleich NULL setzen (nicht ''). Das Standardverhalten von Zend_Db :: insert() und Zend_Db :: update() scheint jedoch zu sein, dass leere Werte in leere Strings ('') übersetzt und als solche in die Datenbank eingetragen werden.Wie setze ich einen Wert auf Null, wenn ich Zend_Db verwende

Kennt jemand Weg, um tatsächlich einen NULL-Wert zu zwingen, in Felder zu gehen, wenn der Wert in PHP leer ist?

Antwort

19

Versuchen Sie, die betroffenen Felder zu setzen: new Zend_Db_Expr('NULL')

+1

Ich mag diese Methode für die _abstraction_, dass diese Methode Ihnen –

4

Ich habe immer nur in der Lage gewesen, dies mit PHP null zu tun:

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

Als Johrn Ich konnte dies mit PHP-null tun Wert:

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

stieß aber Situationen, in denen die Datenbank selbst die Spalte auf NOT NULL und in so festgelegt hatte c ases wurde der Wert tatsächlich in eine leere Zeichenkette umgewandelt oder im Falle von FLOATs auf 0.00. Ich denke, INT-Spalte würde als 0 enden ;-)

0

Während der Verwendung von Zend 2.4.7 für diejenigen, die dieses Problem möglicherweise besuchen, konnte ich dies mit William Lannen 's Antwort verwenden, die einige Inspiration bietet. Unter der Annahme, getTable() kehrt ein Zend\Db\TableGateway Objekt:

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; 
    } 
} 
Verwandte Themen