Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter加入字段帮助?_Php_Codeigniter_Database Design_Codeigniter Datamapper - Fatal编程技术网

Php CodeIgniter加入字段帮助?

Php CodeIgniter加入字段帮助?,php,codeigniter,database-design,codeigniter-datamapper,Php,Codeigniter,Database Design,Codeigniter Datamapper,我需要帮助构建一个包含连接字段的CodeIgniter Datamapper ORM查询。 我有一桌商人和一桌小贩。 他们有一种多对一的关系,也就是说,许多商家是单一供应商的一部分 因此,遵循Datamapper ORM约定的我的数据库表是: 商家 供应商 商家/供应商 此外,在商家/供应商表中,我有连接字段“角色”和“管理员”。 显然,这些数据必须放在联接表中,如果它放在商家表中,我将无法定义每个供应商的角色和管理员 最后,商家通过一对一的关系与用户相关。 将商家视为用户的延伸 我试图从遵循此

我需要帮助构建一个包含连接字段的CodeIgniter Datamapper ORM查询。 我有一桌商人和一桌小贩。 他们有一种多对一的关系,也就是说,许多商家是单一供应商的一部分

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

商家

供应商

商家/供应商

此外,在商家/供应商表中,我有连接字段“角色”和“管理员”。 显然,这些数据必须放在联接表中,如果它放在商家表中,我将无法定义每个供应商的角色和管理员

最后,商家通过一对一的关系与用户相关。 将商家视为用户的延伸

我试图从遵循此数据结构的数据创建一个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\u join\u fields()
函数-但我似乎无法让它工作。具体来说,我尝试了
$m->vendor->include_join_fields()
然后尝试通过
$mV->vendor->join_role
$mV->vendor->join_admin
访问角色/管理员字段,但这不起作用


非常感谢你的帮助

解决方案是在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);
正在进行的讨论

当它到达时,我将发布更多信息。

include\u join\u fields()不执行任何操作,它只是设置一个标志,表示您希望包含这些字段

上面的两个示例都缺少实际执行查询的get()