gpt4 book ai didi

php - 将 Doctrine 实体 bool 字段设置为 0 而不是 null

转载 作者:可可西里 更新时间:2023-11-01 13:12:59 26 4
gpt4 key购买 nike

我试图用值为 0 或 1 的 bool 字段来持久化一个 Doctrine 实体。

当属性设置为 true 时,它​​在数据库中将其保存为“1”。但当它为“假”或“0”时,它会将其保存为数据库中的 NULL。

如何解决此问题,使其仅保存为 1 或 0?

我使用的属性注释如下:

@ORM\Column(name="substitute", type="boolean", nullable=true)

当我将 nullable 设置为 false 时,我无法持久化它,因为它仍然想设置为 null。

谢谢

我持久化的时候,字段值为0

尝试 1@ORM\Column(name="substitute", type="boolean", options={"default":"0"}))

错误:无法保存 null

尝试 2@ORM\Column(name="substitute", type="boolean", nullable= true, options={"default":"0"}))

不起作用,它仍然在 base 中保存 null

信息 1

实际的插入查询试图插入 0。但我收到此错误“ORA-01400:无法将 NULL 插入 (\"MYBASE\".\"MYTABLE\".\"SUBSTITUTE\")”

信息 2

与另一个实体相同的追加

class TestEntity
{
/**
* @ORM\Column(name="test_entity_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\Column(name="substitute", type="boolean")
*/
private $isSubstitute = false;
}

坚持

$test = new TestEntity();
$test->setIsSubstitute(false);
$em->persist($test);

结果

request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\NotNullConstraintViolationException: "An exception occurred while executing 'INSERT INTO TestEntity (test_entity_id, substitute) VALUES (?, ?)' with params [7, 0]: SQLSTATE[HY000]: General error: 1400 OCIStmtExecute: ORA-01400: cannot insert NULL into ("MYBASE"."TESTENTITY"."SUBSTITUTE")  (ext\pdo_oci\oci_statement.c:148)"\n (ext\\pdo_oci\\oci_statement.c:148) at PATH\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\PDOStatement.php:91)"} []

信息 3

可以使用 oci 或 oci8 驱动程序手动插入

sql> INSERT INTO TestEntity (test_entity_id, substitute) VALUES (13, 0)
[2017-04-06 11:21:15] 1 row affected in 62ms

最佳答案

只需将 SQL 默认值设置为 0(编辑:您需要在更改后更新架构):

/**
* @ORM\Column(type="boolean", options={"default":"0"})
*/
protected $isActive;

您也可以默认初始化该属性:

/**
* @ORM\Column(type="boolean", options={"default":"0"})
*/
protected $isActive = false;

只要值设置为 true/false,可为 Nullable 应该无关紧要。

如果您在保存之前真的将该属性设置为 false,并且它仍然在数据库中将其保存为 null,那么就会发生其他事情。

关于php - 将 Doctrine 实体 bool 字段设置为 0 而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234289/

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