使用注释非常简单,可以为给定列设置默认值并初始化实体关系的集合:
use Doctrine\Common\Collections\ArrayCollection;
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
/**
* @ORM\Column(type="bool")
*/
protected $is_visible;
public function __construct()
{
$this->products = new ArrayCollection();
$this->is_visible = true; // Default value for column is_visible
}
}
如果使用 YAML 定义,而不是手动编写Category.php
,如何才能实现相同的目标? __construct()
是执行此操作的唯一方法吗?
Acme\StoreBundle\Entity\Category:
type: entity
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
is_visible:
type: bool
oneToMany:
products:
targetEntity: Product
mappedBy: category
答案 0 :(得分:13)
我认为你以某种方式误解了注释,因为默认值是通过普通的php设置的。
/**
* @ORM\Column(type="bool") <- This is an annotation
*/
protected $is_visible;
public function __construct()
{
$this->products = new ArrayCollection(); // <- This is not an annotation
$this->is_visible = true; // <- This is not an annotation
}
使用YAML映射作为默认值没有区别。原因很简单,这里你的班级是如何看待注释的:
use Doctrine\Common\Collections\ArrayCollection;
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
/**
* @ORM\Column(type="bool")
*/
protected $is_visible;
public function __construct()
{
$this->products = new ArrayCollection();
$this->is_visible = true; // Default value for column is_visible
}
}
这就是YAML映射的外观:
use Doctrine\Common\Collections\ArrayCollection;
class Category
{
protected $id;
protected $products;
protected $is_visible;
public function __construct()
{
$this->products = new ArrayCollection();
$this->is_visible = true; // Default value for column is_visible
}
}
第二个例子的不同之处在于没有更多的注释,因为映射是通过YAML完成的。班级的建设完全相同。因此,默认值是在构造时设置的,这是在普通的PHP中完成的。
此任务的注释和YAML映射之间没有区别。因此,在底线,您需要编辑生成的PHP类以设置默认值。你无法在YAML中设置它,并且至少在我们发言时让教义为你提供这段代码。
也许我误解了你的问题:),如果是这样,请不要犹豫,纠正我。
希望它有所帮助。
的问候,
马特
答案 1 :(得分:13)
您可以使用注释或yaml中的options属性为列添加默认值。您可以在doctrine annotation documentation了解更多内容。
注释示例:
/**
* @ORM\Column(type="bool", name="is_visible", options={"default": false})
*/
protected $isVisible;
YAML的例子:
isVisible:
type: boolean
column: is_visible
options:
default: false
答案 2 :(得分:2)
您可以尝试使用columnDefinition添加DEFAULT值,但它是DDL,它取决于特定的DBMS(坏事)。按照您的示例,使用MySQL的字段* is_visible *:
is_visible:
type: bool
columnDefinition: is_visible tinyint(1) NOT NULL DEFAULT '1'
一般情况下,不是一个好主意,我们鼓励您使用构造函数方法或按实体类中的代码初始化属性...
答案 3 :(得分:1)
时间过去了。现在,您可以通过yaml为列设置默认值。
columnName:
type: string
options:
default: "someText"