【问题标题】:CodeIgniter - Datamapper ORM - Autopopulate InstanceCodeIgniter - Datamapper ORM - 自动填充实例
【发布时间】:2013-01-16 02:06:03
【问题描述】:

只是想知道是否有一种简单的方法可以逐个实例地自动填充对象的相关字段,而不是在配置文件中全局或整个类中自动填充。

我想在一个实例中包含所有相关模型,而不需要链接大量 include_related() 函数。 像这样的东西会很好:

$x = new Model();
$x->include_all_related();

【问题讨论】:

  • 我认为 DataMapper 没有任何内置功能。您可以将include_all_related() 函数添加到模型中,从而省去一遍又一遍地编写代码的麻烦吗?
  • 谢谢@froddd - 是的,这就是我现在采用的方法 - 但这意味着当我创建一个新模型并填写它的关系时($has_many()$has_one()),我也有进入include_all_related() 函数并在那里进行调整。我也在DMORM CI Forum 上问过。我们的解决方案是临时修复,当我不那么忙时,如果我没有得到答案,我会深入挖掘核心并自己创建一个方法:D
  • 实际上,如果我只是读取$has_one$has_many 数组,我不必不断更改include_all_related() 函数。 掌心。请参阅下面的解决方案。

标签: codeigniter codeigniter-datamapper


【解决方案1】:

我想我得把我的手弄脏了。无论出于何种原因,我都没有想到我可以访问 $has_many$has_one 数组。

解决方案很简单:

class Model extends Datamapper{
    var $has_one = array('foo', 'bar', 'baz');
    var $table = 'models';

    function __construct($id = NULL){
        parent::__construct($id);
    }

    function include_all_related(){
        foreach($this->has_one as $h){
            $this->include_related($h['class']);
        }
        return $this;
    }
}

您可能想知道为什么我在$h 变量中使用class 键。在底层,Datamapper ORM 也会跟踪一些其他键,作为更大数组的一部分。如果你打电话给print_r($h),你可以看到他们。 class 键跟踪 foobarbaz

【讨论】:

    【解决方案2】:

    您可以在关系定义上启用它,如果您想要在特定实例上,您需要在运行时更改该实例的关系配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多