如何在YII中为3个DB表创建关系

时间:2013-08-05 16:01:20

标签: php yii

我有3个数据库表tbl_categories,tbl_items,tbl_items_categories如下:

tbl_categories fields: id (category id - primary key), name (category's name)
tbl_items fields: id (item id - primary key), name (item name)
tbl_items_categories fields: id (primary key), item_id (id field value from tbl_items), category_id (id field value from tbl_category)

请注意,一个项目可以分为多个类别(tbl_items_categories正在用于此目的)

我创建了3个模型(在YII中) - 这些表的类别,项目,itemMultiCategories。

任何人都可以让我知道如何在YII中建立关系以达到以下目的:

  1. 如果我有一个项目ID,我应该能够获得所有类别名称(很好有类别ID)
  2. 如果我有类别ID,我应该获得该类别中的所有项目名称(也有项目ID)
  3. 提前致谢。

2 个答案:

答案 0 :(得分:0)

你不是在Yii中创建关系,而是在数据库中进行。 看看this answer。 创建关系后,进入gii(http://yourhost.com/?r=gii),然后再次创建所有模型。不要忘记选中关系创建的复选框。

答案 1 :(得分:0)

这里有一个由关联表桥接的多对多关系(tbl_items_categories)。 Yii的多对多关系活动记录应该可以很容易地处理这个问题。

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

例如,要在商品模型中建立一个可以获得所有类别的关系,您可以执行以下操作:

public function relations()
{
    return array(
        'categories' => array(self::MANY_MANY, 'categories','tbl_items_categories(item_id, category_id)'),
    );
}

外键tbl_items_categories(item_id, category_id)只是关联表的名称,其中的表字段将与括号中的链接表匹配。应按顺序列出您的字段,以便首先列出将链接到当前模型的主键的字段。我的理解是,如果您想按类别获取项目,则类别模型中关系中的外键将如下所示:tbl_items_categories(category_id, item_id)

关联关键字表的注释:

您可以考虑删除“id”字段,因为item_id和category_id的组合可能是唯一的。另外,因为只需要在这些关系声明中引用该表,所以您可能不需要为它设置单独的模型。