我在尝试实施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
扩展Work
和Profiles
已经定义的想法相矛盾。
但是,我尝试为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的正确方法是什么
答案 0 :(得分:0)
取自你的问题:
更新的 我发现问题实际上是Doctrine中的一个错误,它在更新实体时总是在命名空间前加上“\”,而我的自定义自动加载器只加载没有命名空间的类。此外,还有一个继承属性(ids)的错误
两者都将在2.1.1
中修复