两个模型之间的关联不起作用

时间:2015-04-09 11:03:56

标签: cakephp model-associations cakephp-3.0

使用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

1 个答案:

答案 0 :(得分:2)

你写的$this->belongsTo('InformationField');应该是

$this->belongsTo('InformationFields');(带有s)