【发布时间】:2014-01-15 20:55:26
【问题描述】:
我正在 CodeIgniter 中为我的 DataMapper ORM 库构建一个小型核心部件,以控制用户对 DataMapper 对象本身的访问/编辑权限 (CRUD)。为此,我想将DataMapper Entity、Userrole 和Userright 链接在一起。
文档在这里http://datamapper.wanwizard.eu/pages/advancedrelations.html(在标题下;多表关系)。
因此,如果我手动填写连接表,我可以毫无问题地获取值。唯一的问题是保存关系。
这是我的模型规则
用户角色
var $has_many = array(
'userright' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
'dm_entity' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
);
用户权限
var $has_many = array(
'dm_entity' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
'userrole' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
);
Dm_entity
var $has_many = array(
'userrole' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
'userright' => array(
'join_table' => 'dm_entities_userrights_userroles',
),
);
我经常两次声明表格似乎很奇怪,但如果我不这样做似乎不起作用。
从Userright 的角度来看,这是我对该关系的检索代码;
$userrole = new Userrole;
$userrole->get_where(array('name' => 'Administrator'));
$dm_entity = new Dm_entity;
$dm_entity->get_where(array('name' => 'User'));
$userrights = new Userright;
$userrights->where_related($userrole);
$userrights->where_related($dm_entity)->get();
$output = '';
foreach ($userrights as $userright) {
$output .= '<i><b>'.$userright->name.'</b></i> and ';
}
$output = substr($output, 0, -5);
echo '<b>'.$userrole->name.'</b> has the right to '.$output.' the DataMapper entity <b>'.$dm_entity->name.'</b>.'.br();
所以这也没有任何问题。但现在是节省部分:
$new_userright = new Userright;
$new_userright->get_where(array('name' => 'Update'));
$new_userright->save(array($userrole, $dm_entity));
这导致dm_entities_userrights_userroles 表中有两个条目,其中一个条目的dm_entity_id 为空,另一个为userrole_id 为空。
我希望避免为连接表制作单独的模型来解决这个问题。
有谁知道我怎样才能让它工作,以便它输入一个正确的条目,而不是两个分散的条目?
【问题讨论】:
标签: php orm codeigniter-2 codeigniter-datamapper