Yii Framework,如何获取相关的表数据?

时间:2014-03-11 14:24:55

标签: php yii frameworks

我是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和品牌。但我要输出的是产品的所有区域设置,即名称和区域设置。

任何人都可以帮我解决这个问题吗?

提前致谢。

1 个答案:

答案 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;

注意:我还没有测试过代码。