Yii « Cвязь между таблицами MANY MANY
Подскажите как правильно прописать relations для моделей Main и Ancest?
Нужно ли создавать отдельную модель main_ancest?
main
id|name
ancest
id|name
main_ancest
main_id|ancest_id
?
Нужно ли создавать отдельную модель main_ancest?
main
id|name
ancest
id|name
main_ancest
main_id|ancest_id
?
1 ответов
Это?
class MainAncest extends CActiveRecord
{
...
public function tableName()
{
return '{{main_ancest}}';
}
...
}
class Main extends CActiveRecord
{
...
public function tableName()
{
return '{{main}}';
}
public function relations()
{
return array(
'ancest' => array(self::MANY_MANY, 'Users', MainAncest ::tableName().'(main_id, ancest_id)'),
'ancestCount' => array(self::STAT, 'Users', MainAncest ::tableName().'(main_id, ancest_id)'),
);
}
...
}
class Ancest extends CActiveRecord
{
...
public function tableName()
{
return '{{ancest}}';
}
public function relations()
{
return array(
'main' => array(self::MANY_MANY, 'Users', MainAncest ::tableName().'(ancest_id, main_id)'),
'mainCount' => array(self::STAT, 'Users', MainAncest ::tableName().'(ancest_id, main_id)'),
);
}
...
}
Так более легче код все же и более понятнее
И зачем прописывать через [модель]::tableName() если можно вписать напрямую через [имя таблицы], конечно у вас подстраховочный вариант, но если кодить в своем стиле, думаю все ясно и соответствует при генерации кода >
то есть таблица [название_название] будет генерить модель [НазваниеНазвание]
соответственно здесь и обратная логика для модели >
[НазваниеНазвание] - таблица [название_название]
Модель Main
public function relations()
{
return array(
'ancests'=>array(
self::MANY_MANY,
'Ancest',
'main_ancest(ancest_id, main_id)',
),
'main_ancest'=>array(
self::HAS_MANY,
'MainAncest',
'main_id',
),
);
}
Модель Ancest
public function relations()
{
return array(
'mains'=>array(
self::MANY_MANY,
'Main',
'main_ancest(main_id, ancest_id)',
),
'main_ancest'=>array(
self::HAS_MANY,
'MainAncest',
'ancest_id',
),
);
}
Модель MainAncest
public function relations()
{
return array(
'main'=>array(
self::BELONGS_TO,
'Main',
'main_id',
),
'ancest'=>array(
self::BELONGS_TO,
'Ancest',
'ancest_id',
),
);
}
Актуально если в модели таблицы много
self::BELONGS_TO и только PK (PrimaryKeys)
этот код при имеющихся 2ух PK выполнится верно