Здравствуйте, надеюсь на ваши советы и помощь.
Есть три таблицы в БД - скриншот ER-модели
product - некий товар. Например, шапка или книга.
option - некая опция при заказе товара. Например, цвет, или размер.
product_option_value - непосредственно отношение опции к товару. Например, есть цвета данной шапки: красный, белый.
Таким образом, product и option связаны связью MANY2MANY через product_option_value.
Разумеется, встаёт тривиальная задача: получить все товары с их опциями и значениями опций. Вот тут-то я и туплю. Думаю, что связь задавать нужно через through, но не получается задать связь между option и product_option_value.
Самое разумное, к чему я пришёл:
class Product extends CActiveRecord
{
...
public function relations()
{
return array(
'purchase' => array(self::BELONGS_TO, 'Purchase', 'purchase_id'),
'values' => array(self::HAS_MANY, 'ProductOptionValue', 'product_id'),
'options' => array(self::HAS_MANY, 'Option', array('option_id'=>'id'),'through'=>'values'),
);
}
...
}
class Option extends CActiveRecord
{
...
public function relations()
{
return array(
'valueses' => array(
self::HAS_MANY,
'ProductOptionValue',
'option_id',
'joinType'=>'INNER JOIN',
'on'=>'`valueses`.product_id = `products`.product_id'),
);
}
...
}
И затем в контроллере загружать "products.options.valueses". Но не работает правильно. Получается каша.
Есть какие-то идеи?