我正在使用带有Datamapper的codeIgniter 2.1.4,我担心Datamapper的性能。
我的结果只有 2行并成功返回!
但是,当我使用$posts
转储var_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 行..我真的不明白..
答案 0 :(得分:3)
你没有做错任何事 - 这就是它的方式。
尝试了解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
意味着更少的数据。