如何在cakephp中实现自引用(parent_id)模型

Han*_*ink 8 database-design cakephp

我有一个叫做类别的表.该表包含类别及其子(子)类别...

它很简单:

  • ID
  • PARENT_ID
  • 标题

通过这种方式,我可以创建具有无限深度的类别...我有点希望cakephp能够理解parent_id(我也尝试过category_id,但这会使cakePHP自身加入:D)

解决这个问题的正确方法是什么?

注意:还有一个叫"地方"的"多对多"表.这些地方可以属于一个或多个类别.

Ric*_*ome 21

对于这种情况,树行为是过度的.你只需要像这样设置你的模型:

class Category extends AppModel {

  public $hasMany = array(
    'Children'=>array(
       'className'=>'Category',
       'foreignKey'=>'parent_id'
    )
  );

  public $belongsTo = array(
    'Parent'=>array(
       'className'=>'Category',
       'foreignKey'=>'parent_id'
    )
  );

}
Run Code Online (Sandbox Code Playgroud)

现在,当您在Category上执行find()时,您将获得另外两个名为Parent(指向父ID)和Children(列出其子项)的模型.


Ros*_*oss 5

看看树的行为 ; 使用MPTT逻辑.提供给Oracle网站的链接已经过时; 但你可以在蛋糕手册网上找到一堆关于如何使用它的资料.

CREATE TABLE categories (
    id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    parent_id INTEGER(10) DEFAULT NULL,
    lft INTEGER(10) DEFAULT NULL,
    rght INTEGER(10) DEFAULT NULL,
    name VARCHAR(255) DEFAULT '',
    PRIMARY KEY  (id)
);
Run Code Online (Sandbox Code Playgroud)

只需确保您的表格与该结构匹配,以便在Cake中烘焙,以获得最佳效果.