Kohana“有很多通过”的关系

时间:2010-08-03 10:25:04

标签: kohana orm has-many-through

我想知道编辑与表单有很多共通关系的最佳方法是什么。 假设我有一堆可以属于多个类别的用户。

表单会有一些像这样的复选框:

<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? :)

2 个答案:

答案 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更有效的代码。