php - 在自定义类内的查询中获取关联数据时出错。CakePHP 3.x
问题描述
我试图在我的自定义类 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'
]);
}
}
解决方案
推荐阅读
- python - 获取特定值
- excel - Excel 按钮将内容作为电子邮件问题发送
- r - AdaBoost 算法 Hyperparameter Tuning MLR
- css - 当我单击表格内添加另一行的按钮时,我的浏览器滚动卡住了
- html - 这在 HTML 中叫什么,我在哪里可以找到有关它的一些信息?
- plotly.js - 如何将 customData 添加到 plotly.js 中的“名称”属性?
- r - 带有 ggplot2 的散点图按 r 中的特定日期间隔着色
- c - 在C中将一个字符从一个字符串参数复制到另一个
- python - selenium bot 在无头模式下工作,在无头模式下工作
- python - 当 pandas 列中的值更改为 nan 时,真值变为 1