Ошибка Cakephp: Ассоциация изображений не определена в проектах - PullRequest
0 голосов
/ 04 октября 2018

У меня есть приложение CakePHP с плагином "ProjectsManager".

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'
    ]);

плагины / 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'
    ]);

плагины / 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 голосов
/ 05 октября 2018

После некоторых попыток я нашел решение.

В контроллерах приложений (например, ImagesController.php) оно работает при использовании $this->Images->....С этим кодом будет вызываться ImagesModel.

Внутри плагина это не работает ... или, по крайней мере, ProjectsModel не вызывался.

Так что мне нужно было загрузитьмодель вручную, добавив следующий код в ProjectsController.php :

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