我正在研究如何在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查询效果很好。
答案 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 并且一切都很顺利。 (这也解决了我的左连接问题。)