Zend_Db varsayılan alan değerleri göz ardı edilir!

2 Cevap php


I'm using Zend Framework 1.7 with a MySQL 5.0 database for a project I'm doing. Part of the system is a longish form that asks a user for various dates (in dd/mm/yyyy format) as well as some integer fields.

Benim MySQL tabloda, bütün bu alanlar null bir varsayılan sahip. Ben (Zend_Db_Table genişleten) benim modelinde bir fonksiyonu ile form verilerini kaydetmek için geldiğinizde, herhangi bir boş tamsayılar alanları 0 ayarlanır, ve herhangi bir boş tarih alanları 0000-00-00 ayarlanır - Her iki durumda, onlar olmalıdır null.

Ben Zend_Db_Table-> boş olanlar dahil, () tüm değerleri alıntı eklediğinizde bu olduğuna inanıyorum. Ben bu davranışı değiştirmek herhangi bir yolu var mı? Ben şu anda uygun null onları ayarı, alanların grupları döngü yaşıyorum.

Cheers,
Matt

2 Cevap

vartec - Yardımın için teşekkürler. Sizin fikirleriniz bana iyi bir başlangıç ​​noktası verdi. Ben, Zend_Db_Table uzanan MySQL dışarı sütun meta emmek bir işlevi ekleyerek, ve varsayılan değerlerini ayarlamak için kullanabilir, daha da geliştirdik. Ben aşağıda bunu kaba bir taslak gönderdi ettik. Ben henüz bunu basitleştirmek için herhangi bir girişimde değil, sadece ben hemen ihtiyacım alan türlerini örtülü var. Umarım, başkalarının aynı sorunu yaşıyorum yardımcı olabilir.

public function reformatData($array) {
    if (!is_array($array)) {
    	return false;
    }

    $cols = $this->info(Zend_Db_Table_Abstract::METADATA);

    if (is_array($cols)) {
    	foreach ($cols as $col) {
    		if (array_key_exists($col['COLUMN_NAME'], $array)) {
	    		switch ($col['DATA_TYPE']) {
	    			case 'int': case 'tinyint':
	    				if ($array[$col['COLUMN_NAME']] == '') {
	    					$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
	    				}
	    				else {
	    					$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
	    				}
	    				break;

	    			case 'date':
	    				if ($array[$col['COLUMN_NAME']] == '') {
	    					$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
	    				}
	    				elseif(!Zend_Date::isDate($array[$col['COLUMN_NAME']], 'YYYY-MM-dd')) {
    						$date = new Zend_Date($array[$col['COLUMN_NAME']], null, 'en_GB');
        					$newArray[$col['COLUMN_NAME']] = $date->toString('YYYY-MM-dd'); 
	    				}
	    				else {
	    					$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
	    				}
	    				break;

	    			case 'datetime':
	    				if ($array[$col['COLUMN_NAME']] == '') {
	    					$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
	    				}
	    				elseif(!Zend_Date::isDate($array[$col['COLUMN_NAME']], 'YYYY-MM-dd HH:MM')) {
    						$date = new Zend_Date($array[$col['COLUMN_NAME']], null, 'en_GB');
        					$newArray[$col['COLUMN_NAME']] = $date->toString('YYYY-MM-dd HH:MM'); 
	    				}
	    				else {
	    					$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
	    				}
	    				break;

	    			default:
	    				$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
	    				break;
	    		}   		
    		}
    	}
    	return $newArray;
    }
    else {
    	return false;
    }
}

Deneyin:

$data['shouldBeEmtpy'] = new Zend_Db_Expr('NULL');