Кохана "имеет много сквозных" отношений - PullRequest
2 голосов
/ 03 августа 2010

Мне было интересно, как лучше всего редактировать отношение «имеет много сквозного» с формой. Допустим, у меня есть группа пользователей, которые могут принадлежать к нескольким категориям.

Форма будет иметь несколько таких флажков:

<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 голосов
/ 06 августа 2010

Чтобы найти то, что было добавлено (переверните аргументы, чтобы найти то, что было удалено), рассмотрите использование array_diff ().

С этим вы сможете написать что-то более эффективное, чем чистый orm.

0 голосов
/ 03 августа 2010

вот как я это делаю

// 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 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...