Php CodeIgniter加入字段帮助?
我需要帮助构建一个包含连接字段的CodeIgniter Datamapper ORM查询。 我有一桌商人和一桌小贩。 他们有一种多对一的关系,也就是说,许多商家是单一供应商的一部分 因此,遵循Datamapper ORM约定的我的数据库表是: 商家 供应商 商家/供应商 此外,在商家/供应商表中,我有连接字段“角色”和“管理员”。 显然,这些数据必须放在联接表中,如果它放在商家表中,我将无法定义每个供应商的角色和管理员 最后,商家通过一对一的关系与用户相关。 将商家视为用户的延伸 我试图从遵循此数据结构的数据创建一个PHP数组,但似乎无法正确填充角色和管理字段。为了简单起见,我删除了多余的列:Php CodeIgniter加入字段帮助?,php,codeigniter,database-design,codeigniter-datamapper,Php,Codeigniter,Database Design,Codeigniter Datamapper,我需要帮助构建一个包含连接字段的CodeIgniter Datamapper ORM查询。 我有一桌商人和一桌小贩。 他们有一种多对一的关系,也就是说,许多商家是单一供应商的一部分 因此,遵循Datamapper ORM约定的我的数据库表是: 商家 供应商 商家/供应商 此外,在商家/供应商表中,我有连接字段“角色”和“管理员”。 显然,这些数据必须放在联接表中,如果它放在商家表中,我将无法定义每个供应商的角色和管理员 最后,商家通过一对一的关系与用户相关。 将商家视为用户的延伸 我试图从遵循此
[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()