2011-01-06 84 views
1

我在Zend Framework中使用了doctrine2。当你构建实体需要设置类的前缀时,例如(Model_User)。可能吗?。我使用的命令是在Doctrine2中生成带有前缀的实体

./doctrine orm:generate-entities --generate-annotations=1 ../../../application/models/ 
+0

您是否找到任何解决方案? – Developer 2011-03-03 15:57:02

回答

-1

在你的application.ini文件中添加这些行。

doctrine.generate_models_options.pearStyle = true 
doctrine.generate_models_options.generateTableClasses = false 
doctrine.generate_models_options.generateBaseClasses = true 
doctrine.generate_models_options.baseClassPrefix = "Base_" 
doctrine.generate_models_options.baseClassesDirectory = 
doctrine.generate_models_options.classPrefixFiles = false 
doctrine.generate_models_options.classPrefix = "ModuleName_Model_" 
+1

这些设置适用于Doctrine 1. Aflon在询问Doctrine 2。 – 2011-03-03 21:56:50

1

我是新来的学说的ORM,但我做到这一点:当您创建实体管理器让这个

class TablePrefix{ 

    protected $prefix = ''; 

    public function __construct($prefix){ 
     $this->prefix = ''; 

     for($i = 0; $i < strlen($prefix); $i++){ // table prefix like in entity name 
      if($prefix[$i] == '_' && $i-1 > 0){ 
       $prefix[$i-1] = strtoupper($prefix[$i-1]); 
      } 
      else{ 
       $this->prefix .= $prefix[$i]; 
      } 
     } 

     $this->prefix[0] = strtoupper($this->prefix[0]); 
    } 

    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs){ 

     $classMetadata = $eventArgs->getClassMetadata(); 

     $tmp = substr($classMetadata->name, 0, strlen($this->prefix)); 

     if($tmp == $this->prefix){ 
      $classMetadata->name = substr($classMetadata->name, strlen($this->prefix)); 
     } 
    } 
} 

下一个:

$tablePrefix = new TablePrefix('tbl_'); 
    $evm = $entityManager->getEventManager(); 
    $evm->addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePrefix); 
在文件中添加的顶部

use \Doctrine\ORM\Event\LoadClassMetadataEventArgs;

当你运行cmd php vendor/bin/doctrine orm时:生成实体模型模型的名字就OK了!