【问题标题】:Yii Framework, how to fetch related table data?Yii框架,如何获取相关表格数据?
【发布时间】:2014-03-11 14:24:55
【问题描述】:

我是 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 = ProductLocale::model()->findByPk(1);
var_dump($product->product->relations);

它从产品表中输出相关产品的 id 和品牌。但我要输出的是产品的所有语言环境,即名称和语言环境。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

    标签: php yii frameworks


    【解决方案1】:

    我不理解 product_relations 表,并且似乎 Product 的关系是 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 的模型。 如果您想在网格视图中显示此信息,您可能需要一个 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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多