我正在学习Symfony2和Doctrine,所以我对它很陌生。 这是我的问题:我已经获得了具有' statusId'的用户表。专栏(只是示例,更像我的项目中的那个)。我还有DictStatus表和' id'和' name'列(id => name == key => value)。在doctrine2中是否可以在我的DictStatus映射中添加一些常量(如:const ACTIVE = 1;),以便它在数据库中自动插入或更新为id =' 1'和name =' ACTIVE'?
如果那是不可能的,我可以用http://php.net/manual/en/reflectionclass.getconstants.php提取常量,准备插入并自动运行我的脚本 doctrine:schema:update --force
或者不使用DictTable并将我的状态仅仅硬编码为常量?那会是不优雅还是狡猾的东西;)?
答案 0 :(得分:1)
如果状态只是一个标量值,我建议不要为它创建一个单独的实体。这将在以后为您节省大量的数据库查询。最有效的方法是将其作为整数处理。
如果您觉得使用常量更安全,可以将它们实现为实体类的属性。
<?php
namespace Your\SomethingBundle\Entity;
use \Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Foobar
{
const STATUS_GREAT = 1;
const STATUS_NOTSOGREAT = 0;
/**
* @ORM\Column(type="integer")
*/
protected $status;
public function setStatus($status)
{
$this->status = $status;
}
}
用法示例:
$myFoobar = new Foobar();
$myFoobar->setStatus(Foobar::STATUS_GREAT);
$status
值的验证可以在设置器本身或Validator annotation中完成。