当我将其作为公共财产时,我的关系工作得很好。一旦我尝试在构造函数中移动代码,我就会收到错误。问题(我不是PHP专家):PHP中缺少哪些部分(或Cake中的一些魔法)?
我已经阅读了这些内容:Cake Associations,PHP 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