小智 508
<?php
/**
* @Entity
*/
class myEntity {
/**
* @var string
*
* @ORM\Column(name="myColumn", type="integer", options={"default" : 0})
*/
private $myColumn;
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这使用SQL DEFAULT
,某些字段(如BLOB
和)不支持TEXT
.
rom*_*anb 374
数据库默认值不受"支持"支持.使用数据库缺省值的唯一方法是通过columnDefinition
mapping属性,您可以在其中为字段映射到的列指定SQL
代码段(DEFAULT
包括原因).
您可以使用:
<?php
/**
* @Entity
*/
class myEntity {
/**
* @var string
*
* @Column(name="myColumn", type="string", length="50")
*/
private $myColumn = 'myDefaultValue';
...
}
Run Code Online (Sandbox Code Playgroud)
首选PHP级别的默认值,因为它们也适用于新创建的和持久化的对象(在持久保存新对象以获取默认值后,Doctrine不会返回到数据库).
Jer*_*cks 62
在您的实体中设置构造函数并在其中设置默认值.
Sta*_*kyi 53
使用:
options={"default":"foo bar"}
Run Code Online (Sandbox Code Playgroud)
并不是:
options={"default"="foo bar"}
Run Code Online (Sandbox Code Playgroud)
例如:
/**
* @ORM\Column(name="foo", type="smallint", options={"default":0})
*/
private $foo
Run Code Online (Sandbox Code Playgroud)
Cal*_*ino 50
阅读 Symfony 文档的另一个原因永远不会超出趋势.对于我的具体情况有一个简单的解决方案,并将field type
选项empty_data
设置为默认值.
同样,此解决方案仅适用于表单中的空输入将DB字段设置为null的情况.
以前的答案都没有帮助我解决我的具体情况,但我找到了解决方案.
我有一个表单字段需要表现如下:
然后我尝试了这里给出的所有建议.让我列出一下:
<?php
/**
* @Entity
*/
class myEntity {
/**
* @var string
*
* @Column(name="myColumn", type="string", length="50")
*/
private $myColumn = 'myDefaultValue';
...
}
Run Code Online (Sandbox Code Playgroud)
@ORM\Column(name="foo", options={"default":"foo bar"})
Run Code Online (Sandbox Code Playgroud)
/**
* @Entity
*/
class myEntity {
...
public function __construct()
{
$this->myColumn = 'myDefaultValue';
}
...
}
Run Code Online (Sandbox Code Playgroud)
它们都不起作用,因为Symfony如何使用您的Entity类.
Symfony表单字段覆盖在Entity类上设置的默认值.
这意味着,您的数据库架构可以定义一个默认值,但如果在提交表单时将非必填字段留空,则方法form->handleRequest()
内部form->isValid()
将覆盖Entity
类上的默认值并将它们设置为输入字段值.如果输入字段值为空,则将Entity
属性设置为null
.
http://symfony.com/doc/current/book/forms.html#handling-form-submissions
form->handleRequest()
在form->isValid()
方法内部设置控制器上的默认值:
...
if ($myEntity->getMyColumn() === null) {
$myEntity->setMyColumn('myDefaultValue');
}
...
Run Code Online (Sandbox Code Playgroud)
不是一个漂亮的解决方案但它的工作 我可能会做一个validation group
但是可能会有人把这个问题视为数据转换而不是数据验证,我留给你决定.
我也试图以Entity
这种方式覆盖setter:
...
/**
* Set myColumn
*
* @param string $myColumn
*
* @return myEntity
*/
public function setMyColumn($myColumn)
{
$this->myColumn = ($myColumn === null || $myColumn === '') ? 'myDefaultValue' : $myColumn;
return $this;
}
...
Run Code Online (Sandbox Code Playgroud)
即使它看起来更干净,但它不起作用.原因是邪恶form->handleRequest()
方法不使用Model的setter方法来更新数据(深入form->setData()
了解更多细节).
Gig*_*ili 23
以下是如何在 PHP 8 中使用属性来做到这一点。
#[ORM\Column(type: Types::BOOLEAN, nullable: false, options: ['default' => false])]
#[Assert\NotNull()]
private bool $isFavorite = false;
Run Code Online (Sandbox Code Playgroud)
Jie*_*eng 16
我使用的解决方法是LifeCycleCallback
.还在等待,看看是否还有更多的"原生"方法@Column(type="string", default="hello default value")
.
/**
* @Entity @Table(name="posts") @HasLifeCycleCallbacks
*/
class Post implements Node, \Zend_Acl_Resource_Interface {
...
/**
* @PrePersist
*/
function onPrePersist() {
// set default date
$this->dtPosted = date('Y-m-d H:m:s');
}
Run Code Online (Sandbox Code Playgroud)
And*_*lin 13
您也可以使用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>
Run Code Online (Sandbox Code Playgroud)
以下是我为自己解决的问题.下面是一个具有MySQL默认值的Entity示例.但是,这还需要在实体中设置构造函数,并在此处设置默认值.
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'
Run Code Online (Sandbox Code Playgroud)
小智 7
在mysql数据库上也适用于我:
Entity\Entity_name:
type: entity
table: table_name
fields:
field_name:
type: integer
nullable: true
options:
default: 1
Run Code Online (Sandbox Code Playgroud)
这些都不适合我.我在doctrine的网站上找到了一些文档,说明直接设置值来设置默认值.
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/faq.html
private $default = 0;
Run Code Online (Sandbox Code Playgroud)
这插入了我想要的值.
归档时间: |
|
查看次数: |
280580 次 |
最近记录: |