Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2-处理空值的空列(类型float)_Php_Mysql_Zend Framework_Zend Framework2_Zend Db - Fatal编程技术网

Php Zend Framework 2-处理空值的空列(类型float)

Php Zend Framework 2-处理空值的空列(类型float),php,mysql,zend-framework,zend-framework2,zend-db,Php,Mysql,Zend Framework,Zend Framework2,Zend Db,问题实际上是MySQL错误: Incorrect decimal value: '' for column demand_charge at row 1 我有一个与ZfcUser类似的实体: class DeviceConfiguration { // ......... other properties /** * @var float * */ private $demandCharge; // ......... other

问题实际上是MySQL错误:

Incorrect decimal value: '' for column demand_charge at row 1
我有一个与ZfcUser类似的实体:

class DeviceConfiguration
{
    // ......... other properties
    /**
     * @var float
     *
     */
    private $demandCharge;

    // ......... other methods

    /**
     * Set demandCharge
     *
     * @param float $demandCharge
     * @return DeviceConfiguration
     */
    public function setDemandCharge($demandCharge)
    {
        $this->demandCharge = $demandCharge;

        return $this;
    }

    /**
     * Get demandCharge
     *
     * @return float 
     */
    public function getDemandCharge()
    {
        return $this->demandCharge;
    }
}
我有一个类似于
ZfcUser
的映射器,它具有插入数据的方法

class DeviceConfigurationMapper extends AbstractDbMapper
{
    public function insert($device, $tableName = null, HydratorInterface $hydrator = null)
    {
        $device->setLastUpdate(new DateTime());
        $result = parent::insert($device);
        $device->setId($result->getGeneratedValue());
        return $result;
    }        
}
我还有一个类,
DeviceConfigurationHydrator
,它只是
Zend\Stdlib\Hydrator\ClassMethods
的扩展,用于从实体提取数据或将数据添加到实体

在Mysql数据库中,
demand\u charge
字段属于
float
类型,并且不是我在InputFilter中定义的必填字段。因此,当用户将字段保留为空时,我得到一个SQL错误(如上所述)

我如何解决这个问题

DROP TABLE IF EXISTS testfloat;
Query OK, 0 rows affected (0.11 sec)

CREATE TABLE testfloat(id int,prod_name CHAR(10), price DECIMAL);
Query OK, 0 rows affected (0.29 sec)
您之所以收到此消息,是因为您正在
十进制
字段中插入
空白
。下面的例子

插入正确的值。插入
空白时应插入0.00

INSERT INTO testfloat(id,prod_name,price) values(1,'A',10.00);
Query OK, 1 row affected (0.00 sec)

SELECT * FROM testfloat;
+------+-----------+-------+
| id   | prod_name | price |
+------+-----------+-------+
|    1 | A         |     0 |
|    1 | A         |     0 |
|    1 | A         |    10 |
+------+-----------+-------+
3 rows in set (0.00 sec)

到目前为止,我找到的答案很简单!我在
设备配置hydrator
hydrator中添加了以下内容

class DeviceConfigurationHydrator extends ClassMethods
{
    public function extract($object)
    {

        $data = parent::extract($object);
        $field = 'demand_charge';
        if (isset($data[$field]) && empty($data[$field])) {
                unset($data[$field]);
        } 

        return $data;
    }
}
即使已经很晚了,但是如果有人会遇到同样的问题

要解决此问题,您可以为您的
demand\u charge
属性添加以下过滤器

在Zend Framework 2中:
Zend\u Filter\u Null
在Zend Framework 3中:
ToNull


在内部,框架将空字符串
'
更改为
0
,这样您的数据库查询不会失败。

您不理解我的问题。我的问题更多的是关于如何使用Zend Framework 2处理这种情况。无论如何,感谢你的努力!
class DeviceConfigurationHydrator extends ClassMethods
{
    public function extract($object)
    {

        $data = parent::extract($object);
        $field = 'demand_charge';
        if (isset($data[$field]) && empty($data[$field])) {
                unset($data[$field]);
        } 

        return $data;
    }
}