我是yii的新手,模特关系对我来说是新的。我目前正在做一个具有表结构的系统:
products
PK id
brand
product_locales
PK id
FK product_id
name
locale
product_relations
PK id
FK product_id
FK related_id
我的产品型号关系:
public function relations()
{
return array(
'productlocales' => array(self::HAS_MANY, 'ProductLocale', 'product_id'),
'relations' => array(self::MANY_MANY, 'Product', 'product_relations(product_id, related_id)')
);
}
然后我的产品区域设置关系:
public function relations()
{
return array(
'product' => array(self::BELONGS_TO, 'Product', 'product_id')
);
}
当我调用此代码时,在我的Product Controller中:
$product = ProductLocale::model()->findByPk(1);
var_dump($product->product->relations);
它从产品表中输出相关产品的ID和品牌。但我要输出的是产品的所有区域设置,即名称和区域设置。
任何人都可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
我不理解product_relations表,看起来像产品是HAS_MANY,而不是MANY_MANNY的关系。
在任何情况下,如果我已经理解,您需要找到产品的ID,然后找到所有带有此ID的product_locale:
$prodLoc=ProductLocale::model()->findByPk(1);
$arrayProdLoc=ProductLocale::model()->findAllByAttributes('product_id'=>$prodLoc->product_id);
ArrayProd将包含与同一产品相关的所有product_locale的模型。 如果要在gridview中显示此信息,则可能需要DataProvider:
$prodLoc=ProductLocale::model()->findByPk(1);
$provider=CActiveDataprovider('ProductLocale',array (
'criteria'=>array(
'condition'=>'product_id='.$prodLoc->product_id,
));
您还可以在product_locale模型中定义新的自我关系:
public function relations()
{
return array(
'product' => array(self::BELONGS_TO, 'Product', 'product_id'),
'productsLocRelated'=>array(self::HAS_MANY,'ProductLocale',array('product_id'=>'product_id')),
);
}
所以你可以通过以下方式获得所有products_locale:
$prodLoc=ProductLocale::model()->findByPk(1);
$arrayProdLoc=$prodLoc->productsLocRelated;
注意:我还没有测试过代码。