Cakephp错误:在项目上未定义图像关联

时间:2018-10-04 12:47:42

标签: php cakephp cakephp-3.x

我有一个带有“ ProjectsManager”插件的CakePHP应用程序。

src / Model / Table / ImagesTable.php

public function initialize(array $config)
{
    ...
    $this->belongsToMany('ProjectsManager.Projects', [
        'className' => 'ProjectsManager.Projects',
        'foreignKey' => 'image_id',
        'targetForeignKey' => 'project_id',
        'joinTable' => 'images_projects'
    ]);

plugins / ProjectsManager / src / Model / ProjectsTable.php

public function initialize(array $config)
{
    ...
    $this->hasMany('Images', [
        'className' => 'Images',
        'foreignKey' => 'project_id',
        'targetForeignKey' => 'image_id',
        'joinTable' => 'images_projects'
    ]);
    $this->hasOne('CoverImage', [
        'className' => 'Images',
        'bindingKey' => 'cover',
        'foreignKey' => 'id'
    ]);

plugins / ProjectsManager / src / Controller / Publica / ProjectsController.php

    $this->paginate = [
        'fields' => ['Projects.title', 'Projects.slug', 'Projects.cover'],
        'conditions' => $where,
        'contain' => ['Images','CoverImage' => ['fields' => ['filename']]],
        'limit' => 15,
        'order' => ['id' => 'desc']
   ];

因此,在我的控制器中,我想加载所有项目和关联的图像,请看上面的代码。运行此命令会给我一个错误:

  

未在项目上定义图像关联。

因此,我一直在搜索和阅读,发现我需要给插件加上前缀才能使其正常工作。所以我做到了,如代码所示。但是错误仍然存​​在。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过一番尝试,我找到了解决方法。

在App控制器(例如ImagesController.php)中,当您使用$this->Images->...时它可以工作。使用该代码,将调用ImagesModel。

在插件内部,这不起作用...或者至少没有调用ProjectsModel。

因此,我需要通过将以下代码添加到 ProjectsController.php 中来手动加载模型:

public function initialize()
{
    parent::initialize();
    $this->loadModel('ProjectsManager.Projects');
}