Php 可扩展数据映射器ORM?

Php 可扩展数据映射器ORM?,php,database,codeigniter,module,codeigniter-datamapper,Php,Database,Codeigniter,Module,Codeigniter Datamapper,我们正在考虑将DataMapper ORM添加到我们的CodeIgniter HMVC设置中 DataMapper看起来很酷,但我注意到所有模型都与has_one和has_many紧密耦合,例如,从DataMapper文档: class User extends DataMapper { var $has_many = array('book'); var $has_one = array('country'); ........ class Country extends

我们正在考虑将DataMapper ORM添加到我们的CodeIgniter HMVC设置中

DataMapper看起来很酷,但我注意到所有模型都与
has_one
has_many
紧密耦合,例如,从DataMapper文档:

class User extends DataMapper {

    var $has_many = array('book');
    var $has_one = array('country');

........

class Country extends DataMapper {

    var $table = 'countries';

    var $has_many = array('user');

........

class Book extends DataMapper {

var $has_many = array('user');
正如我在开始时提到的,我们使用HMVC来处理模块化代码。这意味着我们可能有国家模块和/或书籍模块。但是它们是模块化的,因此用户模块(包括用户对象)不知道其他两个模块存在,因此我们不能在
User
模型中指定关于其他两个模型的信息

现在,其他两个模型依赖于用户模块,因此他们知道它存在,我的想法是,在国家/地区模型中,我们可以将
book
附加到用户
has\u many
数组中


这样做对吗?我想datamapper一定有办法处理这些用例吧?

如果您不能在代码文件中提交您的关系,您可以使用。通过这种方式,您可以在创建模型实例之后设置关系,例如在Books模块中,当您获得一个用户实例时,只需添加“yourself”(图书)关系

我不确定这种设置在您的情况下是否可行。您可能希望为此创建一些工厂类或方法,这样就不必在控制器上乱扔设置代码