使用CakePHP 3.0,我(以及其他)有两个相关的模型:
<?php
# src/Model/Table/InformationTable.php
namespace App\Model\Table;
class InformationTable extends AppTable
{
public function initialize(array $config) {
parent::initialize($config);
$this->belongsTo('Contractor');
$this->belongsTo('InformationField');
}
}
?>
和
<?php
# src/Model/Table/InformationFieldsTable.php
namespace App\Model\Table;
class InformationFieldsTable extends AppTable
{
public function initialize(array $config) {
parent::initialize($config);
$this->hasMany('Information');
}
}
?>
在与这些模型相关的Contractors
控制器中,以下工作正常:
$this->Contractors->Information
但是当我尝试访问InformationFields
模型时,我收到错误:
$this->Contractors->Information->InformationFields
表“App \ Model \ Table \ InformationTable”与之无关 “InformationFields”
我使用Inflector
类进行了一些测试,并且“信息”&lt; - &gt;“信息”和“InformationField”&lt; - &gt;“InformationFields”的单一化和复数化按预期工作。< / p>
此外,在两个模型debug()
方法中进行initialize()
调用并通过TableRegistry
获取模型时,肯定会调用两个initialize()
方法。但在上面的方案$this->Contractors->Information->InformationFields
中,只运行initialize()
类的InformationTable
方法。
我在这一点上陷入困境。 为什么关联无法正常工作?
编辑:以下是一些测试用例:
$informationTable = TableRegistry::get('Information');
debug($informationTable->InformationFields);
#Error: Table "App\Model\Table\InformationTable" is not associated with "InformationFields"
$informationFieldsTable = TableRegistry::get('InformationFields');
debug($informationFieldsTable->Information);
#No Error
答案 0 :(得分:2)
你写的$this->belongsTo('InformationField');
应该是
$this->belongsTo('InformationFields');
(带有s)