Я пытаюсь загрузить связанные данные в запросе в моем пользовательском классе 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'
]);
}
}