2

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

<?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();

我有错误致命错误:不能[..]application/libraries/Datamapper.php在第 2739 行使用 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`

结果显示关系父->子(下游关系)不是子->父(上游关系)我正在寻找:

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查询效果很好。

4

2 回答 2

0

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

于 2013-01-08T14:47:30.540 回答
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
        )
    );
}
于 2013-01-04T22:22:03.093 回答