添加关系,处理重复条目 - KOHANA 3.3
Add relationship, handling duplicating entries - KOHANA 3.3
我需要为 USER 添加 ROLE 关系。
所以我做了以下事情:
$user->add('roles', $roles_ids_array );
它有效,但系统尝试添加它而不检查数据库中是否已经存在关系,给我一个 mysql "Duplicate entry" 错误。
在 Kohana 2.x 中它工作得很好(系统会自动检查)。 KO3.3有没有简单的实现方法?
如果不使用 $user->has(etc)
怎么办?
根据文档,Kohana 3 在添加新关系之前不会检查现有关系是否存在。所以它按预期运行,但我知道这不能解决您的问题。
最有效的方法是在枢轴 table 上使用 DB::select,然后将 add() 包装在 select 已返回的 if 语句中0 行。
希望对您有所帮助。
您可以通过 $user->roles->find_all()
获取所有角色并迭代它们,通过 array_search()
和 unset()
删除重复项,就像这样
foreach ($user->roles->find_all() as $role) {
if (($key = array_search($role->id, $roles_ids_array)) !== FALSE) {
unset($roles_ids_array[$key]);
}
}
As kohana does not check for previous relations,
we must tell it wich ids to remove/add doing this:
// two arrays: existing ids array and new ids array
// with these lines you'll get what you need, rather than doing foreach,etc
// array_diff is a php function
$ids_remove = array_diff($array1 ,$array2);
$ids_add = array_diff($array2 ,$array1);
// now simply execute kohana's native functions to add/remove many-to-many relations
$obj->remove('relation',$ids_remove) )
$obj->add('relation',$ids_add) )
我需要为 USER 添加 ROLE 关系。
所以我做了以下事情:
$user->add('roles', $roles_ids_array );
它有效,但系统尝试添加它而不检查数据库中是否已经存在关系,给我一个 mysql "Duplicate entry" 错误。
在 Kohana 2.x 中它工作得很好(系统会自动检查)。 KO3.3有没有简单的实现方法?
如果不使用 $user->has(etc)
怎么办?
根据文档,Kohana 3 在添加新关系之前不会检查现有关系是否存在。所以它按预期运行,但我知道这不能解决您的问题。
最有效的方法是在枢轴 table 上使用 DB::select,然后将 add() 包装在 select 已返回的 if 语句中0 行。
希望对您有所帮助。
您可以通过 $user->roles->find_all()
获取所有角色并迭代它们,通过 array_search()
和 unset()
删除重复项,就像这样
foreach ($user->roles->find_all() as $role) {
if (($key = array_search($role->id, $roles_ids_array)) !== FALSE) {
unset($roles_ids_array[$key]);
}
}
As kohana does not check for previous relations,
we must tell it wich ids to remove/add doing this:
// two arrays: existing ids array and new ids array
// with these lines you'll get what you need, rather than doing foreach,etc
// array_diff is a php function
$ids_remove = array_diff($array1 ,$array2);
$ids_add = array_diff($array2 ,$array1);
// now simply execute kohana's native functions to add/remove many-to-many relations
$obj->remove('relation',$ids_remove) )
$obj->add('relation',$ids_add) )