Zend Framework 1.11 + Doctrine 2 +类继承映射(YAML)生成实体的问题

时间:2011-06-27 17:06:28

标签: zend-framework doctrine doctrine-orm class-table-inheritance

我在尝试实施CTI时遇到了很多问题

首先,我为我的实体类使用自定义加载器

class My_AutoLoader implements Zend_Loader_Autoloader_Interface
{

    public function autoload($class)
    {
        $class = trim(str_replace('\\', '/', $class), '/');
        if (@include(APPLICATION_PATH . '/Entities/' . $class . '.php')) {
            return $class;
        } else {
            throw new Zend_Loader_Exception('Cannot load ' . $class . '.');
        }
    }

}

我们的想法是将application\Entities用于没有命名空间的类 比如$user = new Users();

然后我定义了类继承

Profiles:
  type: entity
  table: profiles
  repositoryClass: Repositories\Base
  inheritanceType: JOINED
  discriminatorColumn:
    name: profiletype
    type: integer
    length: 11
  discriminatorMap:
    1: Personal
    2: Work
    3: Business
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    firstname:
      type: string
      length: 255
      fixed: false
      nullable: true
    ...


Work:
  type: entity
  table: work
  repositoryClass: Repositories\Base
  fields:
    position:
      type: string
      length: 255
      fixed: false
      nullable: true

然后我手动创建了课程工作来扩展个人资料

class Work extends Profiles
{
}

第一个问题始于2.0.0(2.0.1),当我使用控制台工具的生成实体时,我得到错误我没有{{ 1}}类,这很奇怪,因为恕我直言与Work扩展WorkProfiles已经定义的想法相矛盾。

但是,我尝试为id课程添加了一列id,但接着我收到一条消息,表明我已经有一列Work 。 DOH!

我尝试为PK添加一些其他列名,但实际上我得到了一个额外的列,这是不必要的,因为还创建了正确的继承列id。在CTI中,我应该有一个FK列,并且没有其他PK具有自动生成的值。

所以我做了坏事来破解教义类并删除缺少id的检查。丑陋但有效。实体开始正常生成,db结构就好了。

我后来发现,所有这些奇怪的行为都是由于教条2中的错误而且在2.0.5中修复了

好吧,我尝试过2.0.5而有完全相同的问题,所以我认为这个错误出现在我的代码中。

我在doctrine的jira中提交了一个错误,并且我得到了我的定义错误的答案我需要id为子类(并且我们所知道的文档都很差,特别是对于YAML映射)。我放弃了,并坚持我的黑客。

后来我尝试使用2.0.6和2.1但是对于那些版本,我的实体不再更新,但每次使用generate-entities时,新的类定义都会追加到最后,所以有重复

我的问题是:

这是教条的问题还是我做错了?

如果在我身上,映射CI的正确方法是什么

1 个答案:

答案 0 :(得分:0)

取自你的问题:

  

更新的   我发现问题实际上是Doctrine中的一个错误,它在更新实体时总是在命名空间前加上“\”,而我的自定义自动加载器只加载没有命名空间的类。此外,还有一个继承属性(ids)的错误

     

两者都将在2.1.1

中修复