Datamapper include_related不扩展结果集列

时间:2012-11-20 12:33:08

标签: codeigniter codeigniter-datamapper

我正在使用Datamapper并希望在结果集中加入相关表(1:1关系)的所有列。因此,我的代码如下:

$p = new Project();
$arrAll = $p->where("id <", 100)->where_related('outboundform', 'reference_type', 'project')->include_related('outboundform')->get()->all_to_array();
print_r($arrAll);

查询有效,但结果中没有表'outboundform'列显示,它们完全被忽略!!我刚刚检查过,生成的SQL读取:

SELECT `project` . * , `outboundform`.`id` AS outboundform_id, `outboundform`.`reference_type` AS outboundform_reference_type, `outboundform`.`reference_id` AS outboundform_reference_id, `outboundform`.`created` AS outboundform_created, `outboundform`.`updated` AS outboundform_updated, `outboundform`.`v1` AS outboundform_v1, `outboundform`.`v2` AS outboundform_v2, `outboundform`.`v3` AS outboundform_v3, `outboundform`.`v4` AS outboundform_v4, `outboundform`.`v5` AS outboundform_v5 FROM (`project`) LEFT OUTER JOIN `outboundform` outboundform ON `project`.`id` = `outboundform`.`reference_id` WHERE `project`.`id` <100 AND `outboundform`.`reference_type` = 'project' LIMIT 0 , 30

这是正常的,并在执行时给我正确的结果。 什么是Datamappers问题?为什么不返回全部列数?

1 个答案:

答案 0 :(得分:0)

相关的outboundform行的属性应该可以在前缀为关系名称的结果对象中访问。因此,id变为outboundform_idreference_type变为outboundform_reference_type,依此类推。

问题是all_to_array()不会将这些转移到数组版本的结果中。 如果要包含它们,则必须明确列出它们:

$arrAll = $p->/* snip */->all_to_array(array('id', 'name', 'outboundform_id', 'outboundform_reference_type')); // Project fields and outboundform fields too

如果您有任何模型的实例,则可以通过该模型的$instance->fields属性(来自数据库表)获取字段列表,并使用这些列表创建{{1}的列表通过为包含的关系创建前缀名称来调用。

或者,如果您只需all_to_array方式访问字段,则可以像这样实现[]界面:

ArrayAccess