Php Zend Framework 2-处理空值的空列(类型float)
问题实际上是MySQL错误: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
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;
}
}