Полиморфизм

Подскажите, если кто в курсе, как грамотно решить задачу работы с полиморфными моделями?

То есть у меня есть таблица, скажем, Shapes. В ней хранятся все фигуры. Есть таблицы Circles, Triangles и т.п.

В них хранятся дополнительные параметры к фигурам из Shapes. Связаны по Shapes.id=Circles.shapeId и т.д.

Задача:

  1. Грамотно создать модели для этой схемы

  2. Желательно получать их список, скажем, по OWNER_ID, в котором модели будут уже соответствующих классов.

п. 1 - важнее.

Если где есть примеры, обсуждения - буду благодарен за ссылки.

Данные в базе?

Тогда это простые модели связанные через relation

То есть через HAS_ONE?

А наследовать никак не получится?

Дело в том, что предполагается и разное поведение у разных классов.

Как-то бы это в ООП уложить :)

Обьясните лучше подробнее зачем это надо, и мы найдем вам тысячу способов других решений )

Гут.

Например, модели отображаются в списке на странице, у каждой свои подробности.

У модели одного класса есть IP-адрес, его нужно отобразить. У другой - еще чего-то.

При наследовании я пишу метод get … эээ … getПодробности :) . И где нужно, вставляю вызов.

Страница редактирования тоже, есс-но разная для различных классов.

Не знаю, может это действительно не лучшее решение, ну намекните на лучшее. :)

up




interface IDetails {

  function getDetails(){}

}






class Site extends CActiveRecord implements IDetails {

  //…

  function getDetails(){

    return $this->ip;

  }

  //…

}


class Post extends CActiveRecord implements IDetails {

  //…

  function getDetails(){

    return $this->author;

  }

  //…

}



Во, оно самое.

Спасибо!