我在尝试实施 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
然后我手动创建了 Work 类来扩展 Profiles
class Work extends Profiles
{
}
第一个问题从2.0.0(2.0.1)开始,当我使用控制台工具的generate-entities时,我收到错误我没有
Work
类的id,这很奇怪,因为恕我直言它与 Work
扩展 Profiles
并且 id
已经定义的想法相矛盾。
但是,我尝试为
id
类添加一列 Work
,但随后 我收到一条消息,表明我已经有一列 id
。卫生部!
我尝试为 PK 添加一些其他列名称,但实际上我得到了一个 不必要的额外列,因为还创建了正确的继承列
id
。在 CTI 中,我应该有一个 FK 列,并且没有其他具有自动生成值的 PK。
所以我做了一件“坏事”来破解学说类并删除对丢失 id 的检查。丑陋但它有效。实体开始正确生成,数据库结构也很好。 我后来发现所有这些奇怪的行为都是由于原则 2 中的错误造成的,并且
它在 2.0.5 中得到了修复。好吧,我尝试了 2.0.5 并且遇到了完全相同的问题
,所以我认为错误出在我的代码中。我在doctrine's jira中提交了一个错误,并且我得到的答复是我的定义是错误的
并且我需要子类的id(并且参考了我们所知道的非常差的文档,特别是对于YAML映射)。我放弃了并坚持我的黑客。后来我尝试使用 2.0.6 和 2.1,但对于这些版本,我的实体不再更新,但是 每次我使用生成实体时,新的类定义都会附加到末尾,因此存在重复项
。我的问题是:
这是教义的问题还是我做错了?如果是我的话,映射 CI 的正确方法是什么
摘自您的问题:
我发现问题实际上是 Doctrine 中的一个错误,它在更新实体时总是在命名空间中添加“\”前缀,而我的自定义自动加载器仅加载没有命名空间的类。另外还有一个继承属性(ids)的bug两者都将在2.1.1中修复