Как установить значение в NULL при использовании Zend_Db

При выполнении запросов UPDATE и INSERT с использованием Zend_Db мне часто нужно устанавливать значения, равные NULL (не ''). Однако поведение по умолчанию Zend_Db :: insert () и Zend_Db :: update (), по-видимому, состоит в том, что значения, которые пусты, переводятся в пустые строки ('') и помещаются в базу данных как таковые.

Кто-нибудь знает, как реально заставить значение NULL перейти в поля, если значение пусто в php?

Попробуйте установить соответствующие поля: new Zend_Db_Expr('NULL')

Я всегда был в состоянии сделать это, используя PHP null:

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

Поскольку Johrn я смог сделать это с нулевым значением PHP:

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

но столкнулись с ситуациями, когда в самой базе данных был установлен столбец NOT NULL, и в таких случаях значение действительно было преобразовано в любую пустую строку или в случае, если FLOATs равны 0.00. Я предполагаю, что столбец INT закончится как 0 😉

При использовании Zend 2.4.7 для тех, кто может посещать эту проблему, я смог использовать это с ответом Уильяма Ланнен , который вдохновил вас. Предполагая, что getTable() возвращает объект 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; } }