Symfony2& Doctrine2 - 自动插入/更新键值行

时间:2014-09-09 19:30:53

标签: php symfony doctrine-orm

我正在学习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并将我的状态仅仅硬编码为常量?那会是不优雅还是狡猾的东西;)?

1 个答案:

答案 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中完成。