gpt4 book ai didi

php - CakePHP 3 - 数据库表与自身的关联

转载 作者:行者123 更新时间:2023-11-28 23:57:17 26 4
gpt4 key购买 nike

我的数据库中有一张表与其自身有关联。我正在尝试获取所有父类别及其子类别,但无法正常工作。

表格是这样的:

id | name | description | image | is_child | forum_category_id | level

现在,显然“forum_category_id”是指同一个表的父 ID。

我烘焙了模型,它在表格文件中:

$this->belongsTo('ForumCategories', [
'foreignKey' => 'forum_category_id'
]);
$this->hasMany('ForumCategories', [
'foreignKey' => 'forum_category_id'
]);

我用来从数据库加载的代码是这样的:

debug($results = $this->find()
->order(['id' => 'ASC'])
->where(['is_child' => 0])
->toArray()
);

使用这段代码,我确实获得了父类别,但没有获得子类别。所以我想使用“包含”,但它只会返回空的父类别。

debug($results = $this->find()
->order(['id' => 'ASC'])
->where(['is_child' => 0])
->contain([
'ForumCategories' => function ($q)
{
return $q
->where(['is_child' => 1]);
}
])
->toArray()
);

我不知道如何获取子类别。我阅读了一些关于使用“Threaded”(到目前为止没有结果/成功)或 TreeBehaviour 的内容,但我真的不知道如何使用它们。

非常感谢任何有关这如何仍然可能的想法!

最佳答案

您应该为 2 关联使用不同的别名。

$this->belongsTo('ForumCategories', [
'foreignKey' => 'forum_category_id'
]);
$this->hasMany('ForumChildCategories', [
'className' => 'ForumCategories',
'foreignKey' => 'forum_category_id'
]);

通过此 $this->ForumCategories->find() 将为您提供父级和 $this->ForumChilfCategories->find() 子级。

否则 - 如果这是选项 - 更改您的数据库模式并使用树行为。

关于php - CakePHP 3 - 数据库表与自身的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319820/

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