Codeigniter Datamapper - 自我关系 - include_related()

时间:2012-12-12 04:37:04

标签: codeigniter codeigniter-datamapper

我正在研究如何在ORM Datamaper中创建自我关系(upsteam)加入。 我的自我关系课看起来:

<?php
class Prospect extends DataMapper{

    var $has_one =array(
        'parent' => array(
            'class' => 'prospect',
            'other_field'=>'prospect'
        ),
        'prospect' => array(
        'other_field' => 'parent'
        )
    );




}

我尝试列出

include_related (parent)
$p->include_related('parent')->get();

我有错误 致命错误:不能在第2739行的[..]application/libraries/Datamapper.php中使用Prospect类型的对象作为数组

我能做到

$p->include_related('prospect')->get();

但在这种情况下,我的连接错误了。

SELECT `prospects`.*, `prospect_prospects`.`id` AS prospect_id, `prospect_prospects`.`name` LEFT OUTER JOIN `prospects` prospect_prospects ON `prospects`.`id` = `prospect_prospects`.`parent_id`

结果显示关系父母 - &gt;孩子(下游关系)不是孩子 - &gt;父母(上游关系) 我期待:

SELECT `prospects`.*, `prospect_prospects`.`id` AS prospect_id, `prospect_prospects`.`name` LEFT OUTER JOIN `prospects` prospect_prospects ON `prospects`.`parent_id` = `prospect_prospects`.`id`

任何提示如何做,以及我必须改变它?怎么看上去很好的上游关系类/ php代码?

ps:直接SQL查询效果很好。

2 个答案:

答案 0 :(得分:0)

我认为你所处理的是一种“互惠”的关系。请查看此页面:http://datamapper.wanwizard.eu/pages/advancedrelations.html

请转到标题为“多对多互惠自我关系”的部分,看看是否对您有帮助。

本质上,它应该是向属性添加互惠的问题:

<?php
class Prospect extends DataMapper{

    var $has_one =array(
        'parent' => array(
            'class' => 'prospect',
            'other_field'=>'prospect',
            'reciprocal' => TRUE
        ),
        'prospect' => array(
            'other_field' => 'parent', 
            'reciprocal' => TRUE
        )
    );
}

答案 1 :(得分:0)

好的,问题解决了 Datamapper库类中使用变量 parent 来保持数组的关系,因此'parent'受到限制,根本不能使用。即在我的情况下。我已经从更改为 parent_company 并且一切都很顺利。 (这也解决了我的左连接问题。)