我需要帮助构建包含连接字段的 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_role
and访问角色/管理字段$mV->vendor->join_admin
- 但这不起作用。
非常感谢您的帮助!