0

我需要帮助构建包含连接字段的 CodeIgniter Datamapper ORM 查询。我有一张Merchants表和一张Vendors表。它们具有多对一的关系,也就是说,许多Merchants是单个Vendor的一部分。

因此,遵循 Datamapper ORM 约定的我的数据库表是:

商人

供应商

商人_供应商

此外,在Mercers_vendors表中,我加入了“角色”和“管理员”字段。显然,这些数据必须放在连接表中,如果放在Merchants表中,我将无法为每个Vendor定义角色和管理员。

最后,商家用户是一对一的关系。将Merchants视为只是Users的扩展。

我正在尝试从遵循此数据结构的数据创建一个 PHP 数组,但我似乎无法正确填充角色和管理字段。为了简单起见,我删除了多余的列:

[vendor] => Array
        (
            [id] => 1
            [name] => Vendor1
            [users] => Array
                (
                    [0] => Array
                        (
                            [id] => 277
                            [username] => merchant1
                            [firstname] => Merchant1
                            [merchant] => Array
                                (
                                    [id] => 1
                                    [user_id] => 277
                                    [role] => Sales
                                    [admin] => 0
                                )

                        )

                    [1] => Array
                        (
                            [id] => 282
                            [username] => merchant2
                            [firstname] => Merchant2
                            [merchant] => Array
                                (
                                    [id] => 2
                                    [user_id] => 282
                                    [role] => Software
                                    [admin] => 1
                                )

                        )

                )

        )

这是我正在使用的代码 - 假设我们知道供应商 ID:

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();
            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
        }
    }
}
$this->load->view('myview', $d);

这让我了解上述没有角色和管理员的 PHP 数据结构。 我很清楚这个include_join_fields()功能 - 但我似乎无法让它工作。具体来说,我尝试$m->vendor->include_join_fields();然后尝试通过$mV->vendor->join_roleand访问角色/管理字段$mV->vendor->join_admin- 但这不起作用。

非常感谢您的帮助!

4

2 回答 2

0

解决方案是在 forloop 内的 $mV 对象上使用 include_join_fields():

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();

            $mV->vendor->where('id', $v->id)->include_join_fields();

            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
            $d['vendor']['users'][$mK]['merchant']['role'] = $mV->vendor->join_role;
            $d['vendor']['users'][$mK]['merchant']['admin'] = $mV->vendor->join_admin;
        }
    }
}
$this->load->view('myview', $d);

CodeIgniter 论坛中的持续讨论。

我会在它到达时发布更多信息。

于 2011-11-22T08:42:36.673 回答
0

include_join_fields() 不执行任何操作,它只是设置一个您希望包含这些字段的标志。

上面的两个示例都错过了实际执行查询的 get() ...

于 2011-12-23T20:14:33.963 回答