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']);
}