如何在原则2中设置默认值?
当前回答
在属性定义上设置默认值时要小心!在构造函数中执行,以避免出现问题。如果您在属性定义上定义它,然后将对象持久化到数据库,然后进行部分加载,那么未加载的属性将再次具有默认值。如果您想再次持久化对象,这是危险的。
其他回答
下面是如何在PHP 8中使用属性来做到这一点。
#[ORM\Column(type: 'boolean', nullable: false, options: ['default' => 0])]
#[Assert\NotNull()]
private bool $isFavorite = false;
如果对实体使用yaml定义, 以下工作为我在postgresql数据库:
Entity\Entity_name:
type: entity
table: table_name
fields:
field_name:
type: boolean
nullable: false
options:
default: false
为@romanb的精彩回答锦上添花。
这在迁移中增加了一点开销,因为您显然不能创建一个非空约束且没有默认值的字段。
// this up() migration is autogenerated, please modify it to your needs
$this->abortIf($this->connection->getDatabasePlatform()->getName() != "postgresql");
//lets add property without not null contraint
$this->addSql("ALTER TABLE tablename ADD property BOOLEAN");
//get the default value for property
$object = new Object();
$defaultValue = $menuItem->getProperty() ? "true":"false";
$this->addSql("UPDATE tablename SET property = {$defaultValue}");
//not you can add constraint
$this->addSql("ALTER TABLE tablename ALTER property SET NOT NULL");
有了这个答案,我鼓励您思考一下,为什么首先需要数据库中的默认值?通常它允许创建非空约束的对象。
这些对我都没用。我在doctrine的网站上找到了一些文档,上面说直接设置值来设置默认值。
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/faq.html#how-can-i-add-default-values-to-a-column
private $default = 0;
这将插入我想要的值。
虽然在构造函数中设置值可以工作,但使用Doctrine Lifecycle事件可能是更好的解决方案。
通过利用prePersist生命周期事件,您可以仅在初始持久化时为您的实体设置默认值。
推荐文章
- 在PHP中插入MySQL时转义单引号
- PHP有代码混淆器吗?
- 跨源请求头(CORS)与PHP头
- PHP sprintf转义%
- 什么是ORM,它是如何工作的,我应该如何使用它?
- 如何看到PHP加载的扩展?
- 如何使用Laravel和Eloquent查询两个日期之间?
- 从Laravel 5中的另一个控制器访问控制器方法
- 使用类型提示时不能传递空参数
- PHP是空时为空?
- 什么是自动装填;你如何使用spl_autoload, __autoload_register ?
- 将查询字符串解析为数组
- 在PHP中::(双冒号)和->(箭头)之间的区别是什么?
- 从SimpleXMLElement对象中获取值
- 如何从PHP数组中删除重复的值