2009-07-23 49 views
5

Khi thực hiện truy vấn UPDATE và INSERT bằng Zend_Db, tôi thường cần đặt giá trị bằng NULL (không phải ''). Tuy nhiên, hành vi mặc định của Zend_Db :: insert() và Zend_Db :: update() dường như là các giá trị trống rỗng được dịch thành các chuỗi rỗng ('') và được đưa vào cơ sở dữ liệu như vậy.Cách đặt giá trị thành NULL khi sử dụng Zend_Db

Có ai biết cách thực sự buộc giá trị NULL đi vào trường nếu giá trị rỗng trong php không?

Trả lời

19

Hãy thử thiết lập các lĩnh vực bị ảnh hưởng để: new Zend_Db_Expr('NULL')

+1

Tôi thích phương pháp này cho _abstraction_ rằng phương pháp này cung cấp cho bạn –

4

Tôi đã luôn luôn chỉ được thể làm điều này bằng PHP null:

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

Như Johrn tôi đã có thể làm điều này với null PHP giá trị:

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

nhưng gặp phải các tình huống mà chính cơ sở dữ liệu đã đặt cột thành NOT NULL và trong c ases giá trị thực sự được chuyển đổi thành chuỗi rỗng hoặc trong trường hợp FLOAT thành 0.00. Tôi đoán INT cột sẽ kết thúc như 0 ;-)

0

Trong khi sử dụng Zend 2.4.7 cho những người có thể truy cập vấn đề này, tôi đã có thể sử dụng câu trả lời này với câu trả lời của William Lannen. Giả sử getTable() trả về một đối tượng 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; 
    } 
} 
Các vấn đề liên quan