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

标签 php mysql cakephp join

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

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/

相关文章:

php - header 已在 CakePHP 应用程序中发送错误

javascript - 自动填充数据被 javascript 的 onchange 事件覆盖

php - seo 友好 url 使用西里尔 х 字符,它总是得到 404。如何解决它?

PHP:关于 MVC 中的 View 层?

php - MYSQL 5.5 到 MARIADB 10.0 = 非分组字段 'x' 用于 HAVING 子句

php - 主页加载时出现 PDO 错误

mysql - 一个数据库表可以在不违反任何设计原则的情况下引用多个表吗

python - 具有 int 值的 SQLAlchemy order_by 字符串列

cakephp - 如何配置CakePHP以检测我的开发/生产环境,还是只将配置文件置于版本控制之外?

unit-testing - 调用一些 testActions 会使测试崩溃