2

フォームとの '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))

しかし、これは私には複雑すぎるように見えます (また、複数の 'has many through' 関係があるため)。kohana orm を使用してこれを達成するためのより簡単な/より良い方法はありますか? :)

4

2 に答える 2

0

追加されたものを見つける (引数を逆にして、削除されたものを見つける) には、array_diff() の使用を検討してください。

これにより、純粋な orm よりも効率的なコードを作成できるはずです。

于 2010-08-06T13:08:32.450 に答える
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 に答える