我有以下数据库结构。实际上,它有点复杂,但我只显示相关部分。该结构是预定义的,无法更改,因为它需要与另一个DB同步。
分类器可以是颜色或大小。所以基本上这个结构可以说Product A
是big
和red
,而Product B
是small
和green
。
我从另一个数据库获取此数据,并且它保证每个产品每个分类器只有一个条目(即产品不能同时为red
和green
)。此外,分类器ID是预定义的(例如,1
为color
,2
为size
。
如何在Product
模型中建立关系,以便将分类器条目作为属性,即$product->Color
和$product->Size
?
换句话说,我该怎么做:
SELECT * FROM product AS p
LEFT JOIN xref_table AS x ON (p.ProductId = x.ProductId)
LEFT JOIN classifierEntry AS classifierColor ON
(x.ClassifierEntryId = classifierColor.ClassifierEntryId
AND classifierColor.ClassifierId = 1)
LEFT JOIN classifierEntry AS classifierSize ON
(x.ClassifierEntryId = classifierSize.ClassifierEntryId
AND classifierSize.ClassifierId = 2)
......以优雅高效的方式?
答案 0 :(得分:0)
答案 1 :(得分:0)
问题是你需要根据关系完全做多少。 一个选项就是 get 函数,它的行为类似于属性:
public function getColor()
{
$product = .. // get the color data via SQL statement, using e.g. Yii::app()->db->createCommand
return $product->ClassifierName
}
public function getSize()
{
$product = .. // get the size data via SQL statement, using e.g. Yii::app()->db->createCommand
return $product->ClassifierName
}
因为实际关系也是如此 - 他们只是选择数据并将其作为“属性”呈现给您。
您可以通过一个名为 getProperty 的函数重新定义任何属性,其行为类似于$model->property