@flammerman
Web Developer / И фронт и сервер

Yii Relations. Как выбрать правильно уникальные значения из связанной таблицы?

Добрый день

Есть 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 сделать можно.
  • Вопрос задан
  • 394 просмотра
Пригласить эксперта
Ответы на вопрос 2
Так как связь variations используется не только в контексте size, нужно создать для этого отдельную связь где в параметрах указать выборку только уникальных значений size, либо перебирать массив
Ответ написан
Комментировать
@flammerman Автор вопроса
Web Developer / И фронт и сервер
Тогда проще массивом, я еще не на столько знаю Yii, чтобы создавать Relations не через встроенный GII.

В гугле вся инфа что находил - это делать как-то через такую конструкцию:
public function relations() {
	return array(
		'variations' => array(self::HAS_MANY, 'GoodsVariations', 'goods_id', 'distinct'=>true),
	);
}

Но она выдает ошибку.

Хотя может это можно сделать применив к модели scopes 'size'=>array('group'=>size); но также не знаю как применить scope к конструкции: $product->variations Непосдредственно к связи variations
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы