在Datamapper中设计关系时,必然会调用与相关对象相同名称的关系,当您使用Application_Model_User
作为类名时,这不会太方便。对于那些急于说有“class”键配置选项的人,我知道。在那里尝试过。它只适用于获取相关对象,而不是用于更新它们。
以下是重现问题的代码段:
// User Model
class UserModel extends Datamapper
{
public $table = 'users';
public $has_many = array(
'roles' => array(
'class' => 'RoleModel',
'other_field' => 'usermodel',
'join_other_as' => 'role',
'join_self_as' => 'user',
'join_table' => 'users_roles'
),
);
}
class RoleModel extends DataMapper
{
public $table = 'roles';
public $has_many = array(
'usermodel' => array('class' => 'UserModel',
'other_field' => 'roles',
'join_other_as'=> 'user',
'join_self_as' => 'role',
'join_table' => 'users_roles' )
);
}
// controller code. Make sure you have a role with INT id = 2, and a user with INT id = 5 in your db
$user = new UserModel(2);
$role = new RoleModel(5);
$user->save($role);
此代码提供“无法将用户模型与rolemodel相关联”。错误,但它确实正常工作(意味着在连接表user_roles
中插入新记录),如果关系从“roles”重命名为“rolemodel”。
因此,如果CI的Datamapper的任何狂热用户都可以提供帮助,请告诉我如何正确定义关系。
答案 0 :(得分:2)
<强>更新强>
您可以使用关键键将对象另存为关系:
$object->save( $related, $relationship_key ).
所以你需要使用
$user->save($role, "roles");
请参阅此网页的底部: http://datamapper.wanwizard.eu/pages/save.html
离开这一点以防其他人离开。
您希望在关系中拥有自定义名称。 (这是我在涉及所有愤世嫉俗之后得到的结果) -
您可以使用关系数组中的键将关系命名为任何关系。因此,在下面的代码段中,您使用book
&lt; - 这个或不必与该类名相同 - 这就是class
键的用途。
class Author extends DataMapper {
$has_many = array(
'book' => array( // YOU USE THIS KEY TO NAME THE RELATIONSHIP
'class' => 'book',
'other_field' => 'author',
'join_self_as' => 'author',
'join_other_as' => 'book',
'join_table' => 'authors_books'
)
);
}
如果这不适合你,我猜你在建立你的人际关系时会有别的错误。