setFlag($this->form->getValue("flag"));//$this->form->getValue("flag") = "false" 在我自动-6ren">
gpt4 book ai didi

php - Symfony 插入查询 : setting a non-null value with "false" sets it to "null"

转载 作者:行者123 更新时间:2023-11-29 13:53:24 25 4
gpt4 key购买 nike

我有以下代码:

$stmt->setFlag($this->form->getValue("flag"));//$this->form->getValue("flag") = "false"

在我自动生成的 Propel 类中调用了以下代码:

1     public function setFlag($v)
2 {
3 if ($v !== null) {
4 if (is_string($v)) {
5 $v = in_array(strtolower($v), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
6 } else {
7 $v = (boolean) $v;
8 }
9 }
10 if ($this->flag !== $v) {
11 $this->flag = $v;
12 $this->modifiedColumns[] = TableNamePeer::FLAG;
13 }
14 return $this;
15 }

我的标志模式条目如下:

ALTER TABLE tablename ADD COLUMN flag BOOLEAN NOT NULL DEFAULT false;

我的 XML 条目如下:

<table name="tablename" phpName="TableName">
...
<column name="flag" phpName="Flag" type="BOOLEAN" required="true" defaultValue="false"/>
...
</table>

我已经通过 XDebug 验证了我的表单使用 POST 提交了值为 false(绝对不是 null)的变量。

但是,setFlag 函数将变量接收为 null 该函数跳过 第 3 行的 if 分支setFlag 函数,然后在第 11 行和第 12 行将 flag 设置为 null。这会在提交到数据库时产生错误,因为该字段不能为 null。

这是怎么回事?

编辑:

有趣的是,如果我向我的 setFlag 函数传递一个实际的 false 值,即 $stmt->setFlag(false),那么 setFlag 收到数据库提交有效的正确值。什么?

编辑 2:

事实证明,我使用的 Bootstrap 开关在单击开关/复选框时使用 on 值,否则使用 null,所以它确实通过了null 到函数,我一定是在某处出错了。

现在的问题是当开关未被点击时是否可以让开关通过 false 而不是 null ,或者我是否必须放入一个特殊的仅检查该标志。欢迎就这两种方法提出建议。

最佳答案

没有我喜欢的好的解决方案,所以我最终这样解决了我的问题:

$stmt->setFlag((bool) $this->form->getValue("flag"));

转换(为了我的目的)保证产生 truefalse,这就足够了。

如果有人有更好的想法,我愿意接受建议。

关于php - Symfony 插入查询 : setting a non-null value with "false" sets it to "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com