Php 学说中的缺省值

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

如何在原则2中设置默认值?

我使用的解决方法是
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>