关联模型上的cakephp 3树行为

关联模型上的cakephp 3树行为,cakephp,tree,associations,cakephp-3.0,Cakephp,Tree,Associations,Cakephp 3.0,我正在使用cakephp 3.4.2,并且正在做一些准备工作,以便深入到新的cakephp中。我决定遵循教程,但将其打包为插件 有一个Articles模型和一个Categories模型,我们在CategoriesTable.php initialize()方法上使用树行为 当您在CategoriesController.php add或edit函数中调用treeList finder方法时,它可以正常工作,线程列表可以很好地显示在表单的select列表中 ArticlesController.p

我正在使用cakephp 3.4.2,并且正在做一些准备工作,以便深入到新的cakephp中。我决定遵循教程,但将其打包为插件

有一个Articles模型和一个Categories模型,我们在CategoriesTable.php initialize()方法上使用树行为

当您在CategoriesController.php add或edit函数中调用treeList finder方法时,它可以正常工作,线程列表可以很好地显示在表单的select列表中

ArticlesController.php添加和编辑函数

public function add()
{
    $article = $this->Articles->newEntity();
    if ($this->request->is('post')) {
        $article = $this->Articles->patchEntity($article, $this->request->getData());
        if ($this->Articles->save($article)) {
            $this->Flash->success(__('Your article has been saved.'));
            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('Unable to add your article.'));
    }
    $this->set('article', $article);

    $categories = $this->Articles->Categories->find('treeList');
    $this->set(compact('categories'));
}
抛出一个错误:

Unknown finder method "treeList"
我曾尝试在ArticlesTable.php中实例化树行为,就像在CategoriesTable.php中那样(尽管我认为这不是必需的),但这不起作用——错误仍然存在。 如有任何建议,将不胜感激

debug($this->Articles->Categories->target())进行调试

`/plugins/Blog/src/Controller/Admin/ArticlesController.php(第51行) 对象(蛋糕\ORM\Table){

}`

ArticlesTable.php初始化函数:

public function initialize(array $config)
{
    $this->table('articles');
    $this->displayField('title');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsTo('Categories', [
        'foreignKey' => 'category_id',
    ]);

}

感谢ndm指出这一点


belongsTo关联应该指向Blog.Categories

您的文章缺少触发错误的实际代码。。。在没有看到这一点的情况下,很难给出任何建议。我真傻——对不起。我已使用添加功能编辑了问题。抱歉。看起来
$this->Articles->Categories
并不是你所期望的那样。如果调试
$this->Articles->Categories->target()
,您可能会看到它是
\Cake\ORM\Table
的一个实例,而不是具体的
ArticlesTable
类?您的
ArticlesTable
类的
initialize()
方法是什么样子的?是的,您是对的。我已经添加了上面的调试代码和ArticlesTable.php初始化方法,
属于
关联应该指向
Blog.Categories
'registryAlias' => 'Categories',
'table' => 'categories',
'alias' => 'Categories',
'entityClass' => '\Cake\ORM\Entity',
'associations' => [],
'behaviors' => [],
'defaultConnection' => 'default',
'connectionName' => 'default'
public function initialize(array $config)
{
    $this->table('articles');
    $this->displayField('title');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsTo('Categories', [
        'foreignKey' => 'category_id',
    ]);

}