Ошибка при получении связанных данных в запросе внутри пользовательского класса.CakePHP 3.x - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь загрузить связанные данные в запросе в моем пользовательском классе CstmGroupsClass, но я получаю сообщение об ошибке «Ассоциация книг не определена в библиотеках».Единственный способ, которым это работает, - это запись loadModel ('CstmLibraries') в контроллере и изменение псевдонима для связей моделей с оригиналами, например hasMany ('Books', ...) для hasMany ('CstmBooks' ,...).Но мне нужно иметь возможность выполнить запрос внутри пользовательского класса, и в нем я не могу использовать loadModel (), и tableRegistry не решает проблему.

Спасибо за помощь.

CstmGroupsClass.php

class CstmGroupsClass {

    protected $CstmGroups;

    function __construct() {        
        $this->CstmGroups = TableRegistry::get('CstmGroups');
    }

    public function listGroups($contain = []) { //Value of $contain: ['Libraries','Libraries.Books']       
        $listGroups = $this->CstmGroups->find()->contain($contain);
        return $listGroups->execute(); /* <= Here the error is produced */       
    }
}

CstmGroupsController.php

class CstmGroupsController extends AppController {

    private $cstmGroupsClass;

    public function initialize() {  
        $this->cstmGroupsClass = new CstmGroupsClass();
    }

    public function listGroups() {

        $responseListGroups = $this->cstmGroupsClass->listGroups(['Libraries','Libraries.Books']);

        $this->set(compact('responseListGroups'));
    }
}

CstmGroupsTable.php

class CstmGroupsTable extends Table {

    public $prefix = 'cstm_';

    public function initialize(array $config) {
        parent::initialize($config);

        $this->setTable($this->prefix.'groups'); //final name: cstm_groups
        $this->setPrimaryKey('id');

        $this->hasOne('Libraries', [
            'className' => $this->prefix.'libraries', //final name: cstm_libraries
            'foreignKey' => 'group_id'
        ]);
    }
}

CstmLibrariesTable.php

class CstmLibrariesTable extends Table
{
    public $prefix = 'cstm_';

    public function initialize(array $config){
        parent::initialize($config);

        $this->setTable($this->prefix.'libraries'); //final name: cstm_libraries
        $this->setPrimaryKey('id');

        $this->hasOne('Groups',[
            'className' => $this->prefix.'groups', //final name: cstm_groups
            'foreignKey' => 'library_id'
        ]);

        $this->hasMany('Books', [
            'className' => $this->prefix.'books', //final name: cstm_books
            'foreignKey' => 'library_id'
        ]);
    }
}

CstmBooksTable.php

class CstmBooksTable extends Table {

    public $prefix = 'cstm_';

    public function initialize(array $config) {
        parent::initialize($config);

        $this->setTable($this->prefix.'books'); //final name: cstm_books
        $this->setPrimaryKey('id');

        $this->belongsTo('Libraries', [
            'className' => $this->prefix.'libraries', //final name: cstm_libraries
            'foreignKey' => 'library_id'
        ]);
    }
}
...