Есть модель категорий, включающих подкатегории (2 уровня и не больше), есть продукция, приписываемая некоторой категории. Хочется выводить для родительских категорий все товары, приписанные категориям-потомкам.
Код: Выделить всё
public function relations() {
return array(
'children' => array(self::HAS_MANY, 'Category', 'parent_id'),
'products' => array(self::HAS_MANY, 'Product', 'category_id'),
'allProducts' => array(self::HAS_MANY, 'Product', 'category_id', 'through' => 'children')
);
}
Попытка его использования приводит к неправильному запросу (причем, на оффоруме уже есть пару схожих тем), а именно - в сгенерированном запросе связь получается такой - category.category_id = product.id , а не category.category_id = product.category_id , как должно быть. Видно, что объект внешнего ключа и объект первичного ключа поменяны местами.
Покопавшись в коде фреймворка дошел до этого кода: (CActiveFinder.php, lines 643-652)
Код: Выделить всё
if($element->slave->slave===null)
{
$fke=$element->slave;
$pke=$element;
}
else // nested through detected
{ // <------ в случае использования through сюда не попадаем, хотя по идее должны. Нету этого объекта - $element->slave->slave
$fke=$element;
$pke=$element->slave;
}
Код: Выделить всё
if($element->slave->slave===null && $element->slave->relation->select)
{
$fke=$element->slave;
$pke=$element;
}
else // nested through detected
{ // <------ а теперь попадаем, т.к. при использовании through из промежуточной таблицы не берутся никакие поля, т.е., $element->slave->relation->select - пусто
$fke=$element;
$pke=$element->slave;
}
Теперь вопрос - такое поведение только для данного случая или же для других вариантов связей при использовании through ? Кто-нибудь уже использовал успешно through ?
З.Ы. В документации по-моему какие-то нестыковки в разделе о through - там то вторичный ключ фигурирует в связи с through, то первичный...