gpt4 book ai didi

php - MySQL 和 PHP - 创建多个父子关系

转载 作者:可可西里 更新时间:2023-11-01 06:30:40 25 4
gpt4 key购买 nike

我正在尝试使用具有层次结构的类别表来构建导航系统。通常,该表将定义如下:

id (int) - Primary key
name (varchar) - Name of the Category
parentid (int) - Parent ID of this Category referenced to same table (Self Join)

但要注意的是,我要求一个类别可以是多个父类别的子类别。就像拥有和属于许多 (HABTM) 关系一样。

我知道如果有两个表,categories & items,我们使用连接表 categories_items 来列出 HABTM 关系。但在这里我没有两张表,只有一张表,但应该以某种方式显示 HABTM 与自身的关系。这可以使用单个表吗?如果是,如何?如果不可能,在创建附加连接表时应遵循哪些规则(表命名、字段)?

我正在尝试使用 CakePHP 来实现这一点,如果有人可以为这个问题提供 CakePHP 解决方案,那就太棒了。即使那不可能,任何关于创建连接表的解决方案都会受到赞赏。感谢您的宝贵时间。

-- 编辑--我的问题似乎有点令人困惑,所以我试图重申我在寻找什么。在传统的自引用(self join)父子关系中,每个项只能有一个父项。我正在寻找的是模拟 HABTM 关系,即每个项目的多个 parent 。

类别和项目 - 为了定义 HABTM,我们使用 categories_items 连接表。

如果在类别中我需要 HABTM,我应该怎么做?

最佳答案

我希望第二次回答不是不好,因为第一次误解了这个问题。以下实质上是 pinkgothic 回答的 CakePHP 实现。

新的 HABTM 连接表:

CREATE TABLE `categories_parent_categories` (
`category_id` int(10) unsigned NOT NULL,
`parent_category_id` int(10) unsigned default NULL,
`order` int(10) unsigned NOT NULL default '0'
);

模型中的关联:

class Category extends AppModel
{
var $hasAndBelongsToMany = array(
'ParentCategory' => array(
'className' => 'Category',
'joinTable' => 'categories_parent_categories',
'foreignKey' => 'category_id',
'associationForeignKey' => 'parent_category_id',
'order' => 'CategoriesParentCategory.order'
)
);
}

关于php - MySQL 和 PHP - 创建多个父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2514834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com