Я немного не понял, почему вы не хотите создать
одну базовую модель для всех типов материалов и
одну таблицу для всех материалов любого типа. Например:
Код:
class Post extends ORM {
protected $_table_columns = array(
'id' => array( 'type' => 'int' ),
...
'type' => array( 'type' => 'string' ),
...
);
protected $_post_type = 'post';
protected $_table_name = 'posts';
}
Каждый материал в табличке posts мог бы иметь поле type, в котором вы пишите например discount, promo, news, post и т.д. У каждой модели $_table_name всегда должен быть 'posts', а вот $_post_type свой, ну и соответственно все модели должны наследоваться от Post. Далее просто, в Post пишем:
Код:
public function save(Validation $validation = NULL)
{
...
$this->type = empty($this->type) ? $this->_post_type : $this->type;
...
parent::save($validation);
...
Cache::instance($this->type)->delete($this->type.'-'.$this->id);
return $this;
}
Остальные методы класса Post аналогично расширяются
Код:
public function find($id = NULL)
{
$this->where($this->_object_name.'.type', '=', $this->_post_type);
return parent::find($id);
}
public function find_all($id = NULL)
{
$this->where($this->_object_name.'.type', '=', $this->_post_type);
return parent::find_all($id);
}
public function delete($id = NULL)
{
$this->where($this->_object_name.'.type', '=', $this->_post_type);
return parent::delete($id);
}
public function count_all($id = NULL)
{
$this->where($this->_object_name.'.type', '=', $this->_post_type);
return parent::count_all($id);
}
public function values(array $values, array $expected = NULL)
{
$this->type = $this->_post_type;
return parent::values($values, $expected);
}
Расширяется на раз-два.
В общем то тут одна кописпаста, думать особо не надо