【问题标题】:Codeigniter Datamapper - self-relationship - include_related()Codeigniter 数据映射器 - 自我关系 - 包括相关()
【发布时间】:2012-12-12 04:37:03
【问题描述】:

我正在研究如何在 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();

我有错误 致命错误:无法在第 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`

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

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

【问题讨论】:

    标签: codeigniter codeigniter-datamapper


    【解决方案1】:

    我认为您正在处理的是“互惠”关系。看看这个页面: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
            )
        );
    }
    

    【讨论】:

    • parent 被禁止,基于我的 datamapper 源代码 -> 使用了 parent 并且不应该用于创建关系
    • 当您想以两种方式保持关系时,需要互惠的自我关系,并且您有两个 FK 的设置(many-2-many 或 has_many 两种方式)。如果启用并创建关系,则会自动添加另一个方向的关系。
    • WanWizard -> 是的,我知道。如果您发布受限制名称空间的列表(作为父项),那就太好了。顺便说一句:你的图书馆很棒:)谢谢它
    【解决方案2】:

    好的,问题解决了
    变量 parent 在 Datamapper 库类中用于保持具有关系的数组,因此 'parent' 受到限制,它不能完全使用。即在我的情况下。我已从 parent 更改为 parent_company,一切都运行良好。 (这也解决了我的左连接问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 2013-11-07
      • 1970-01-01
      • 2011-11-05
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多