2013-05-03 103 views
0

我在一个项目上使用Zend Framework 2和学说工作2扩展学说2个实体

我有维护数据库以下过程:

  1. 我写XML映射文件我的实体
  2. 我生成使用该命令的实体“ORM:生成实体”
  3. 我生成使用下面的命令数据库“ORM:架构工具:更新--force”

我想用自定义业务代码丰富生成的实体:我可以简单地编辑生成的实体,但这意味着在每个新的实体代中丢失我的自定义代码,我在寻找更好的工作流程。

基本上,这是我哗哗是可以做到的:

生成的实体:

namespace My\Base\Entity; 

class Cart 
{ 
    private $quantity; 

    public function setQuantity($quantity) 
    { 
     $this->quantity = $quantity; 

     return $this; 
    } 

    public function getQuantity() 
    { 
     return $this->quantity; 
    } 
} 

富集实体:

namespace My\Entity; 

class Cart extends \My\Base\Entity\Cart 
{ 
    public function setQuantity($quantity) 
    { 
     $quantity = filter_var(
      $quantity, 
      \FILTER_VALIDATE_INT, array('min_range' => 1) 
     ); 

     if ($quantity === false) { 
      throw new \InvalidArgumentException(
       'Quantity should be an integer higher than 0' 
      ); 
     } else { 
      return parent::setQuantity($quantity); 
     } 
    } 
} 

这是行不通的,因为Doctrine期望\ My \ Entity \ Cart本身就是一个实体(尽管它只是一个扩展基础实体)。

有什么办法来实现类似的东西?

回答

0

不幸的是,没有。 Doctrine中的代码生成功能是作为“三等公民”提供的,这意味着您不应该依赖它。对于实体的初始骨架生成来说很好,但在此之后,您应该手动编辑它们。

尽管在大多数情况下是,但实体生成器足够聪明,可以在您的实体中找出差异,如果您修改该架构,并且它只会添加正确的方法。它不会完全覆盖您的实体。它也永远不会拿起财产删除。

我建议试着让实体生成器做它的工作,然后与您选择的版本控制软件进行比较,看它是否做得正确。

0

在我看来,这取决于你想达到什么。

在描述的代码中,我看到类似简单验证的内容。

我伸出我的实体类功能getInputFilter(),在那里我保持规则进行验证单个记录。

public function getInputFilter() 
{ 
    if (!$this->inputFilter) { 
     $inputFilter = new InputFilter(); 

     $factory = new InputFactory(); 

     $inputFilter->add($factory->createInput(array(
      'name' => 'id', 
      'required' => true, 
      'filters' => array(
       array('name' => 'Int'), 
      ), 
     ))); 

     // [...] 

     $this->inputFilter = $inputFilter; 
    } 

    return $this->inputFilter; 
} 

请检查下面的链接查看完整的代码:https://github.com/evolic/zf2-tutorial/blob/v0.4.2/module/Album/src/Album/Entity/Song.php

其他方法,如检索所有记录或单一个我把模型类:(/模块/专辑/ src目录/专辑/型号/歌曲。PHP)

控制器类都可以在这里找到:(/module/Album/src/Album/Controller/SongController.php)

整个代码,可以发现:https://github.com/evolic/zf2-tutorial/blob/v0.4.2/

我不产生实体基于数据库。我自己创造它们。

我希望能帮到你。