Добрый день
Есть 2 таблицы:
Сущности товара (сократил, есть еще поля):
CREATE TABLE `goods` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`menutitle` VARCHAR(250) NOT NULL COMMENT 'Название',
PRIMARY KEY (`id`),
INDEX `menutitle` (`menutitle`),
INDEX `FK_goods_goods_brand` (`brand_id`),
CONSTRAINT `FK_goods_goods_brand` FOREIGN KEY (`brand_id`) REFERENCES `goods_brand` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3782;
Возможные вариации товара (EAV решил пока обойти стороной):
CREATE TABLE `goods_variations` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`goods_id` INT(10) UNSIGNED NOT NULL,
`articul` VARCHAR(100) NULL DEFAULT NULL,
`size` VARCHAR(100) NULL DEFAULT NULL,
`color` VARCHAR(100) NULL DEFAULT NULL,
`weight` VARCHAR(100) NULL DEFAULT NULL,
`stock` INT(5) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK_goods_options_goods` (`goods_id`),
INDEX `articul` (`articul`),
CONSTRAINT `FK_goods_options_goods` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5060;
Связи в моделях:
Модель Goods (сущности товаров, таблица 1).
'variations' => array(self::HAS_MANY, 'GoodsVariations', 'goods_id'),
Модель GoodsVariations (вариации товара, таблица 2).
'goods' => array(self::BELONGS_TO, 'Goods', 'goods_id'),
В View-product получаем модель любого товара
$product = Goods::model()->findByPk($product_id); // Произвольный ID, например 1234, не суть
Вариации товара получаются самым обычным способом:
foreach($product->variations as $variation) {
echo $variation->size . '<br />'; // Пускай в таком виде
}
Основной вопрос в том, каким образом можно получить только уникальные значения размера (size) товара используя relation. Конечно можно сделать array_unique и прочее, но всеже может быть это как-то через Activerecord сделать можно.