Цитата:
У меня на данном этапе связи нет, т.к. считаю что здесь она не нужна, не вижу смысла, а при выборке буду использовать многие-ко-многим.
Я не очень понимаю эту фразу и какой вы там смысл видите или не видите.
Есть стандартная задача (у вас как я понимаю она стандартная) - есть стандартное решение. У kohana есть средства для ее решения. А какой велосипед вы там строите я примерно догадываюсь, но он не нужен скорее всего.
У вас есть категории, есть то что в них добавляется - пока все.
Если сделать многие-ко-многим, нужна промежуточная таблица. (постом выше cat2art)
Потом при добавлении чего-то в категорию, вы добавляете саму запись в одну таблицу и запись о связи в промежуточную.
Выглядит это примерно так:
Код:
$obj->save();
$obj->add('categories', $cids);
где $cids - массив id-шников выбранных категорий
И все.
Метод add(), который это делает смотрим в модуле ORM. Там уже есть цикл с $query->values, который строит запрос и потом выполняется 1 раз: $query->execute($this->_db);
Код:
public function add($alias, $far_keys)
{
$far_keys = ($far_keys instanceof ORM) ? $far_keys->pk() : $far_keys;
$columns = array($this->_has_many[$alias]['foreign_key'], $this->_has_many[$alias]['far_key']);
$foreign_key = $this->pk();
$query = DB::insert($this->_has_many[$alias]['through'], $columns);
foreach ( (array) $far_keys as $key)
{
$query->values(array($foreign_key, $key));
}
$query->execute($this->_db);
return $this;
}
Итого: то, что вам нужно, будет выглядеть примерно так:
Код:
public function action_add()
{
$obj = ORM::factory('video');
if ($this->request->method() == HTTP_Request::POST)
{
$obj->values($_POST);
try
{
$cids = $this->request->post('cids');
$obj->save();
$obj->add('categories', $cids);
$this->request->redirect('admin/news');
}
catch (ORM_Validation_Exception $e)
{
$errors = $e->errors('validation');
}
}
$content = View::factory('index/video/v_video_add');
}
И таблицу `categories` сделать через parent_id
Итого 3 таблицы, много-ко-многим и мало кода)
з.ы. (к тому, "Что тут можно улучшить")
$data = Arr::extract($_POST, array('name', 'original_name', 'year', 'time', 'description', 'image', 'url')), а потом $video->values($data); можно не писать, а сделать проще
$video->values($_POST)
или
$video->values($_POST, array('name', 'original_name', 'year', 'time', 'description', 'image', 'url'))
Во view
View::factory('index/video/v_video_add')->set('obj', $obj);
В шаблоне к переменной обращаться:
$obj->name
Гы) Мне бы так кто рассказывал, когда я сам это все ковырял))