Especialización de modelos: altas, formularios y vistas según categoría

Hola a todos vengo con un problema y creo que me ayudarán muchos acá :)

El tema es que tengo modelos que representan una especialización y no sé cómo hacer para poder instanciarlos dependiendo de la categoría en un action para poder dar de alta o mostrar los datos.

Por ejemplo puedo tener:

Anuncios->Vehículos->Autos

Anuncios->Vehículos->Motos

Anuncios->Propiedades->Campos

Anuncios->Propiedades->Departamentos

Cada categoría tiene atributos diferentes, autos tiene cantidad de puertas, motos tiene cilindradas, departamento tiene piso, departamento tiene pisos, cochera y campos no los tiene, etc

Para poder dar de alta un auto voy a tener que instanciar

Anuncios, Vehiculo y Autos en caso de que hayan elegido la categoría autos.

si seleccionan Departamentos debería instanciar Anuncios, Propiedades y Departamentos

yo pensaba hacerlo en un solo action y con un condicional instanciarlo

$anuncio = new Anuncio();

if ($categoria = Autos::ID_CATEGORIA){

$vehiculo = new Vehiculos();

$autos = new Autos();

if ($_POST… 3 save()()

$this->render(‘autos’, array(‘anuncio’ => $anuncio, ‘vehiculo’ => $vehiculo, ‘auto’ => $auto));

} elseif ($categoria = Motos::ID_CATEGORIA){

$vehiculo = new Vehiculos();

$motos = new Autos();

if ($_POST… 3 save()

$this->render(‘motos’, array(‘anuncio’ => $anuncio, ‘vehiculo’ => $vehiculo, ‘motos’ => $motos));

}

etc, etc un if para cada categoría especial

¿Hay alguna de hacerlo más práctico?

Me refiero a programación o modelo de datos

Muchas gracias, todavía no tengo nada hecho, únicamento me planteo esto para poder comenzar

Hola Dany,

Precisamente estoy redactando un Wiki acerca de ese "problemita".

Básicamente se resuelve sobrecargando la función "instantiate" de CActiveRecord.

Saludos.

Adicionalmente, lo invito a probar el nuevo foro en español en: http://www.yiiframeworkenespanol.org/foro

Gracias por la pista, encontré algo http://www.yiiframework.com/wiki/198/single-table-inheritance/

luego lo pruebo

no me sirve el ejemplo es para el tipo de herencia que se representa en una tabla y yo una tabla para cada objeto