2

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

该表单将有一些复选框,如下所示:

<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 是否有更简单/更好的方法来完成此任务?:)

4

2 回答 2

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 ?>
于 2010-08-03T14:15:18.920 回答
0

要查找添加的内容(反转 args 以查找删除的内容),请考虑使用 array_diff()。

有了这个,您应该能够编写比纯 orm 更有效的代码。

于 2010-08-06T13:08:32.450 回答