Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Mysql ZF2-输入过滤器->;将值设置为null_Mysql_Pdo_Zend Framework2 - Fatal编程技术网

Mysql ZF2-输入过滤器->;将值设置为null

Mysql ZF2-输入过滤器->;将值设置为null,mysql,pdo,zend-framework2,Mysql,Pdo,Zend Framework2,在我的ZF2应用程序中,我有一个带有几个可选字段的表单。若用户决定将该字段留空,那个么它应该在db中将其设置为NULL,然而—它不起作用 示例字段: $this->add(array( 'name' => 'productId', 'type' => 'select', 'options' => array( 'value_options' => array( 'global' => 'Global option', // th

在我的ZF2应用程序中,我有一个带有几个可选字段的表单。若用户决定将该字段留空,那个么它应该在db中将其设置为NULL,然而—它不起作用

示例字段:

$this->add(array(
  'name' => 'productId',
  'type' => 'select',
  'options' => array(
    'value_options' => array(
      'global' => 'Global option', // this should be null
      'mobile' => 'Another option'
    )
  ),
));
和过滤器:

$inputFilter->add(array(
    'name' => 'productId',
    'validators' => array(
        array(
            'name' => 'Callback',
            'options' => array(
              // 'messages' => array(
              //     \Zend\Validator\Callback::INVALID_VALUE => $value,
              // ),
              'callback' => function ($value) {
                  if($value === 'global')
                  {
                    $value = null;
                    //return true;
                    // echo '<pre>' . var_export($value, true) . '</pre>';
                    // die();
                  }
                }

            ),
        ),
    ),
));
$inputFilter->添加(数组)(
“名称”=>“产品ID”,
“验证程序”=>数组(
排列(
'name'=>'Callback',
“选项”=>数组(
//'消息'=>数组(
//\Zend\Validator\Callback::无效的\u值=>$VALUE,
// ),
“回调”=>函数($value){
如果($value==='global')
{
$value=null;
//返回true;
//回显“”。变量导出($value,true)。“”;
$inputFilter->add(array(
    'name' => 'productId',
    'required'          => false,
    'filters' => array(
      array('name' => 'ToNull', 'options' => array('type' => \Zend\Filter\ToNull::TYPE_STRING)),
    ),
));
//模具(); } } ), ), ), ));
当选择“移动”选项时,这段代码起作用。然而,使用“全局”选项则不起作用。 如您所见,我已经进行了一些基本调试,以确保该值在回调时被覆盖,并且它确实返回NULL。不管怎样,验证器说:

排列( 'productId'=> 排列( 'callbackValue'=>'输入无效', ), )

因此,我尝试在回调时返回true,这导致了以下错误:

语句无法执行(23000-1452-无法添加或更新子行:外键约束失败(
app
codes
,约束
fk_products_id
外键(
productId
)引用
products
id
))


我应该如何将null参数传递给我的数据库?如果我完全从表单中删除这个字段,那么它将被忽略,并且一切正常

找到了解决方案,其实很简单

我可以将所需的select选项设置为某个特定值,然后使用ToNull filter将其转换为null-

$inputFilter的代码: