【问题标题】:codeIgniter Datamapper Performance on Joins with include_relatedcodeIgniter Datamapper 在与 include_related 的连接上的性能
【发布时间】:2014-03-13 20:51:29
【问题描述】:

我正在使用带有 Datamapper 的 codeIgniter 2.1.4,我担心 Datamapper 的性能。

我的结果只有2行并且成功返回!

但是当我将$postsvar_dump($posts) 一起转储时,我得到20.000 行代码,其中包含所有数据/关系/配置/表格/字段/语言等。

抱歉,由于行过多,我无法粘贴转储数据。

有什么问题?我哪里做错了?

这是我的示例查询:

$posts = new post_model();
$posts->where('active', 1)
      ->where('slug', $slug)
      ->include_related('users', '*', 'user', true)
      ->include_related('categories', '*', 'category', true)
      ->include_related('tags', '*', 'tag', true)
      ->include_related('groups', '*', 'group', true)
      ->get_paged($this->uri->segment(4), 50, TRUE);

包括相关的模型分配:

public $has_one = array('users' => 
                                array(
                                  'class' => 'users_m',
                                  'other_field' => 'post',
                                  'model_path' => 'application/modules/users',
                                ),
                         'categories' => array(),
                         'tags'       => array(),
                         'groups'     => array(),
                  );

帖子相关作业:

public $has_one = array(
    'request' => array(
        'class' => 'posts_m',
        'model_path' => 'application/modules/posts',
    )
);

顺便说一句..

我将instantiate设置为false,转储数据减少到3.000行..我真的不明白..

【问题讨论】:

    标签: php codeigniter codeigniter-2 codeigniter-datamapper


    【解决方案1】:

    你没有做错任何事——事情就是这样。

    尝试了解 PHP 和 CodeIgniter 的工作原理。

    在 PHP5 中,所有对象都是通过引用分配的。这意味着 尽管您在访问 Datamapper 对象时会看到它们,但它们是 不复制,不占用内存。

    CodeIgniter 通过将所有对象作为单例分配给 $this 来工作,所以 var_dump($this) 将向您显示对象信息的页面和页面。 所有其他访问 CI 的对象(通过自动机制 或通过 get_instance() )使用引用。

    显然,当您转储 Datamapper 对象时,您会看到所有这些。 因为Datamapper访问数据库、语言和表单 验证库,这些库又可以链接到其他几个 图书馆。

    http://ellislab.com/forums/viewthread/188420/#890508


    $instantiate - 如果是TRUE,则实际对象会被实例化并自动填充列。

    http://datamapper.wanwizard.eu/pages/getadvanced.html

    实例化TRUE 意味着更多数据。 Intantiate FALSE 意味着更少的数据。

    【讨论】:

    • 当我转储$posts 变量时,实际上我是否因为引用而转储了codeigniter $this 对象?我理解正确吗?
    • 当我尝试将结果保存为缓存时,缓存的文件很大。如何在没有引用 codeigniter 数据的情况下仅获取当前查询结果?
    • var_dump(和相关的)会给你所有无关的数据。不要使用var_dump。否则你会得到一个 DataMapper ORM 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多