我想知道编辑与表单有很多共通关系的最佳方法是什么。 假设我有一堆可以属于多个类别的用户。
表单会有一些像这样的复选框:
<input type="checkbox" name="category_ids" value="1" />
<input type="checkbox" name="category_ids" value="2" />
然后在我的控制器中我可以做类似的事情:
// dump all relations
DB::delete('users_categories')->where('user_id','=',$user->id)->execute();
// add new relations
foreach (explode(',', $_POST['category_ids']) as $category)
$user->add('category', ORM::factory('category', $category))
但这对我来说太复杂了(也因为我有不止一个'有很多通过'的关系)。有没有更容易/更好的方法来实现这个使用kohana orm? :)
答案 0 :(得分:0)
多数民众赞成我怎么做
// C
$roles = ORM::factory('role')->find_all();
foreach ($roles as $role)
{
$action = isset($form['user']['roles'][$role->id]) ? 'add' : 'remove';
// you dont need this if-statement if you'r using ko2
if ($action === 'add' && $user->has('roles', $role))
{
continue;
}
$user->$action('roles', $role);
}
// V
<?
$roles = ORM::factory('role')->find_all();
foreach ($roles as $role):
?>
<?= form::checkbox('user[roles]['.$role->id.']', $role->id, $user->has('roles', $role)) ?>
<?= form::label('user_roles_'.$role->id, $role->name) ?>
<br />
<? endforeach ?>
答案 1 :(得分:0)
要查找添加的内容(反转args以查找删除的内容),请考虑使用array_diff()。
有了这个,你应该能够编写比纯粹的orm更有效的代码。