cakephp树模型结构
我想得到一个类别树,以如下方式显示:cakephp树模型结构,cakephp,cakephp-model,Cakephp,Cakephp Model,我想得到一个类别树,以如下方式显示: cat1 subcat1 subcat2 subcat3 subsubcat1 cat2 subcat1 ... array( (int) 0 => array( 'Category' => array( 'id' => '1', 'name' => 'catname', 'father'
cat1
subcat1
subcat2
subcat3
subsubcat1
cat2
subcat1
...
array(
(int) 0 => array(
'Category' => array(
'id' => '1',
'name' => 'catname',
'father' => '2'
),
'ParentCategory' => array(
'id' => '2',
'name' => 'catname',
'father' => '3'
),
'ChildCategory' => array(
(int) 0 => array(
'id' => '161',
'name' => 'catname',
'father' => '1'
)
)
),
(int) 1 => array(
'Category' => array(
'id' => '2',
'name' => 'catname',
'father' => '3'
),
'ParentCategory' => array(
'id' => '3',
'name' => 'catname',
'father' => '4'
),
'ChildCategory' => array(
(int) 0 => array(
'id' => '1',
'name' => 'catname',
'father' => '2'
),
(int) 1 => array(
'id' => '5',
'name' => 'catname',
'father' => '2'
),
(int) 2 => array(
'id' => '489',
'name' => 'catname',
'father' => '2'
)
)
),
...
我有这张桌子:
CREATE TABLE IF NOT EXISTS `kategorie` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(256) collate utf8_polish_ci NOT NULL,
`father` int(11) NOT NULL default '-7',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
所以每个记录只包含self和parent id(我不能添加左id和右id)
目前,我制作了这个模型:
class Category extends AppModel
{
public $name = 'Category';
public $useDbConfig = 'external';
public $useTable = 'kategorie';
var $belongsTo = array(
'ParentCategory' => array(
'className' => 'Category',
'foreignKey' => 'father'
));
var $hasMany = array(
'ChildCategory' => array(
'className' => 'Category',
'foreignKey' => 'father'
));
}
和控制器:
class CategoriesController extends AppController {
public function beforeFilter()
{
parent::beforeFilter();
//$this->Auth->allow('add','logout');
}
public function index()
{
$res = $this->Category->find('all');
//$this->set('categories', $this->Category->find('all') );
debug($res); die;
}
}
调试输出如下所示:
cat1
subcat1
subcat2
subcat3
subsubcat1
cat2
subcat1
...
array(
(int) 0 => array(
'Category' => array(
'id' => '1',
'name' => 'catname',
'father' => '2'
),
'ParentCategory' => array(
'id' => '2',
'name' => 'catname',
'father' => '3'
),
'ChildCategory' => array(
(int) 0 => array(
'id' => '161',
'name' => 'catname',
'father' => '1'
)
)
),
(int) 1 => array(
'Category' => array(
'id' => '2',
'name' => 'catname',
'father' => '3'
),
'ParentCategory' => array(
'id' => '3',
'name' => 'catname',
'father' => '4'
),
'ChildCategory' => array(
(int) 0 => array(
'id' => '1',
'name' => 'catname',
'father' => '2'
),
(int) 1 => array(
'id' => '5',
'name' => 'catname',
'father' => '2'
),
(int) 2 => array(
'id' => '489',
'name' => 'catname',
'father' => '2'
)
)
),
...
所以基本上我得到了类别对象数组(这些对象的数量就是类别的数量(所有,甚至子类别)。每个类别都有一个父类别和子类别数组
这不是我想要的,因为我必须“手动”解析数组以构建一个类别树,这会很慢,因为我必须在数组中找到具有指定id的类别(类别id不是数组中的索引)
也许有人知道一些特殊的技巧来获得一个好的、有用的类别树?尝试查看find方法的其他参数。您可以尝试使用
$res = $this->Category->find('threaded');
您可以在上找到更多详细信息。这很好,但它需要字段“parent\u id”,我有字段“parent”,无法更改它-有没有技巧将此字段名映射到“parent\u id”?这很奇怪-cake应该提供一些参数,即表中的parent\u id名称…在CakePHP 2.1中找到anserw->使用find('threaded',数组('parent'=>'father');