0

我有 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)

提前致谢。

4

2 回答 2

0

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

于 2013-08-05T16:26:40.213 回答
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 的组合可能是唯一的。此外,由于表只需要在这些关系声明中被引用,您可能不需要为它设置单独的模型。

于 2013-08-05T16:29:41.730 回答