Php 学说中的缺省值
如何在原则2中设置默认值?我使用的解决方法是Php 学说中的缺省值,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,如何在原则2中设置默认值?我使用的解决方法是LifeCycleCallback。仍在等待查看是否还有其他“本机”方法,例如@Column(type=“string”,default=“hello default value”) /** *@Entity@Table(name=“posts”)@HasLifeCycleCallbacks */ 类Post实现节点、\Zend\u Acl\u资源\u接口{ ... /** *@预科生 */ 函数onPrePersist(){ //设置默认日期 $th
LifeCycleCallback
。仍在等待查看是否还有其他“本机”方法,例如@Column(type=“string”,default=“hello default value”)
/**
*@Entity@Table(name=“posts”)@HasLifeCycleCallbacks
*/
类Post实现节点、\Zend\u Acl\u资源\u接口{
...
/**
*@预科生
*/
函数onPrePersist(){
//设置默认日期
$this->dtPosted=date('Y-m-dh:m:s');
}
不支持“可移植”的数据库默认值。使用数据库默认值的唯一方法是通过columnDefinition
映射属性,在该属性中为字段映射到的列指定SQL
代码段(default
cause inclusive)
您可以使用:
在实体中设置构造函数并在其中设置默认值。以下是我自己解决问题的方法。下面是一个MySQL默认值的实体示例。但是,这也需要在实体中设置构造函数,并在其中设置默认值
Entity\Example:
type: entity
table: example
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
label:
type: string
columnDefinition: varchar(255) NOT NULL DEFAULT 'default_value' COMMENT 'This is column comment'
添加到@romanb精彩答案
这在迁移中增加了一点开销,因为您显然无法创建具有NOTNULL约束且没有默认值的字段
//此up()迁移是自动生成的,请根据需要进行修改
$this->abortf($this->connection->getDatabasePlatform()->getName()!=“postgresql”);
//让我们添加不带not null CONTAINT的属性
$this->addSql(“altertable tablename ADD property BOOLEAN”);
//获取属性的默认值
$object=新对象();
$defaultValue=$menuItem->getProperty()?“true”:“false”;
$this->addSql(“更新tablename集属性={$defaultValue}”);
//不能添加约束
$this->addSql(“ALTER TABLE tablename ALTER property SET NOT NULL”);
有了这个答案,我鼓励您想一想,为什么首先需要数据库中的默认值?通常是允许创建具有非空约束的对象。使用:
options={"default":"foo bar"}
而不是:
options={"default"="foo bar"}
例如:
/**
* @ORM\Column(name="foo", type="smallint", options={"default":0})
*/
private $foo
我也遇到了同样的问题。我想将默认值从数据库自动输入到实体中。猜怎么着,我做到了:)
如果对实体使用yaml定义,
以下内容适用于postgresql数据库:
Entity\Entity_name:
type: entity
table: table_name
fields:
field_name:
type: boolean
nullable: false
options:
default: false
在mysql数据库上也适用于我:
Entity\Entity_name:
type: entity
table: table_name
fields:
field_name:
type: integer
nullable: true
options:
default: 1
更新
阅读Symfony的文档的另一个原因永远不会过时。针对我的具体情况,有一个简单的解决方案,就是将字段类型
选项清空\u数据
设置为默认值
同样,此解决方案仅适用于表单中的空输入将DB字段设置为null的场景
背景
之前的答案都不能帮助我解决具体的问题,但我找到了一个解决方案
我有一个表单字段,其行为如下:
不是必需的,可以留空。(使用“必需”=>false)
如果留空,它应该默认为一个给定的值。为了更好的用户体验,我没有在输入字段上设置默认值,而是使用html属性“占位符”,因为它不那么显眼
然后我尝试了这里给出的所有建议。让我列出它们:
- 为实体属性设置默认值时:
这些对我都不起作用。我在doctrine的网站上找到一些文档,上面说直接设置值来设置默认值
这插入了我想要的值。您也可以使用xml来实现:
<field name="acmeOne" type="string" column="acmeOne" length="36">
<options>
<option name="comment">Your SQL field comment goes here.</option>
<option name="default">Default Value</option>
</options>
</field>
您的SQL字段注释位于此处。
默认值
虽然在构造函数中设置值会起作用,但使用条令生命周期事件可能是更好的解决方案
通过利用prePersist
Lifecycle事件,您可以仅在初始持久化时设置实体的默认值。在属性定义中设置默认值时要小心!改为在构造函数中执行,以避免出现问题。如果在属性定义中定义,则将对象持久化到数据库,然后e部分加载后,未加载的属性将再次具有默认值。如果要再次持久化该对象,这是危险的。这显然是合乎逻辑的方法。是否有人在构造函数中设置默认值时遇到问题?原则建议的解决方案:@cantera25这应该是答案+1这不正确如果您添加了需要有默认值的新字段,则删除现有实体。因此,不,这不应该是答案。取决于您需要做什么新链接到该主题的常见问题解答:很好!似乎没有选项={“default”=0}选项在官方文档fyi中,options
参数对于未签名的
值也很有用。参见此,我使用此答案和接受的答案涵盖所有基础。另外,请注意,您也可以这样做:options={“default”:0}
小心使用"“而不是”,因为它会在我的条令版本中导致错误。这应该是选择的答案!在处理迁移时,这绝对是理想的解决方案,否则条令:迁移:diff
将无法理解您设置了默认值,因为这只扫描注释/元数据,而不是PHP默认值。@ORM\CColumn(name=“foo”,type=“decimal”,precision=7,scale=2,options={“default”=0})是有效的(从下面不流行的答案来看)@ORM\Column(name=“is_activated”,type=“boolean”,options={“default”=0})或@ORM\Column(name=“is_activated”,type=“boolean”,options={“default”=0})Ahmed这似乎对Symfony 2.3中的布尔人不起作用。然而,options={“default”=“0”})有效,将整数放在引号中。如果它是布尔值,为什么不使用:options={“default”:false}?但这里有一个问题:如果我设置了“datetime”类型怎么办?@a
Entity\Entity_name:
type: entity
table: table_name
fields:
field_name:
type: integer
nullable: true
options:
default: 1
private $default = 0;
<field name="acmeOne" type="string" column="acmeOne" length="36">
<options>
<option name="comment">Your SQL field comment goes here.</option>
<option name="default">Default Value</option>
</options>
</field>