yii отношения через один стол

Возможно ли в Yii 1.1.14 соединить эти таблицы, используя одну таблицу "object_rel"?

object_rel:

  • Я бы
  • owner_id (например, идентификатор записи местоположения)
  • тип владельца (например, 2 = местоположение)
  • slave_id (например, идентификатор записи программы)
  • slave_type (например, 1 = программа)

местоположение (тип = 2):

  • Я бы
  • ...

программа (тип = 1):

  • Я бы
  • ...

категория (тип = 3):

  • Я бы
  • ...

или мне нужно написать что-нибудь необычное?

Я пытался MANY_TO_MANY без удачи...

1 ответ

К сожалению, я не думаю, что это возможно с отношениями, поскольку они требуют, чтобы вы указали модель-класс. Тем не менее, вы можете определить что-то подобное в вашей модели для object_rel:

private static $modelTypes = array(
    1 => Program::model(),
    2 => Location::model(),
    3 => Category::model(),
);


public static function getOwner($object)
{
    $data = self::$db->createCommand()
               ->select('owner_id, owner_type')
               ->from('object_rel')
               ->where('owner_id = :object_id', array(':object_id' => $object->id))
    ->queryRow(true); // assuming every object only has one owner

    // no results found
    if ($data === false) {
        return false;
    }

    $model = self::$modelTypes[data['owner_type']];
    return $model->findByPk(data['owner_id']);
}
Другие вопросы по тегам