为什么我们不能在模型构造函数中定义关系?

时间:2014-07-12 23:09:19

标签: php cakephp

当我将其作为公共财产时,我的关系工作得很好。一旦我尝试在构造函数中移动代码,我就会收到错误。问题(我不是PHP专家):PHP中缺少哪些部分(或Cake中的一些魔法)?

我已经阅读了这些内容:Cake AssociationsPHP Constructor

这将有效:

class SupportIp extends SupportAppModel {
    public $name = 'SupportIp';

    public $hasAndBelongsToMany = array(
        'SupportGroup' => array(
            'className' => 'Support.SupportGroup',
            'joinTable' => 'support_groups_support_ips'
        )
    );

这不会:

class SupportIp extends SupportAppModel {
    public $name = 'SupportIp';

    public function __construct() {
        parent::__construct();

        $this->hasAndBelongsToMany = array(
            'SupportGroup' => array(
                'className' => 'Support.SupportGroup',
                'joinTable' => 'support_groups_support_ips'
            )
        );
    }

在构造函数中定义关系,触发此错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'on clause'
SQL Query: SELECT `SupportGroup`.`id`, `SupportGroup`.`name`, `SupportGroup`.`created`, `SupportGroup`.`modified` FROM `cominar`.`support_groups` AS `SupportGroup` JOIN `cominar`.`support_groups_support_ips` ON (Array)

只将其定义为属性,才能完美运作。

修改

这是一个时间问题。 这里给出了答案:Dynamic model relations in CakePHP不幸的是,它并没有说出原因。

通过在关系之后移动构造函数,它可以正常工作。

public function __construct() {

    $this->hasAndBelongsToMany = array(
        'SupportGroup' => array(
            'className' => 'Support.SupportGroup',
            'joinTable' => 'support_groups_support_ips'
        )
    );

    parent::__construct();
}

有关它的更多信息:Associations on the fly

0 个答案:

没有答案