未定义索引 "counterCache" CakePHP
Undefined Index "counterCache" CakePHP
我正在为一个项目做一个简单的任务。
它按预期工作,但在(第二个如果)之后,当我在我的联系人模型上使用 find 方法时,它会抛出一条通知:undefined index "counterCache"
。我想修复此通知以防止将来发生崩溃。
我知道我的代码很乱而且没有完美实现(我必须更新模型而且我不能改变所有连接的方式)。
我阅读了 CakePHP 的 API 手册,但我似乎不明白发生了什么。我该如何解决这个通知?
通知:
Notice (8): Undefined index: counterCache [CORE/Cake/Model/Model.php, line 2109]
Notice (8): Undefined index: counterCache [CORE/Cake/Model/Model.php, line 2109]
代码:
public function confirm($request_id = null, $contact_that_wants_to_add_you_id = null, $confirm = 0){
$this->layout = 'dashboard';
$this->User->hasMany=$this->User->belongsTo=$this->User->hasManyAndBelongsTo=array();
$this->Contact->hasMany=$this->Contact->belongsTo=$this->Contact->hasManyAndBelongsTo=array();
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
));
$requests = $this->Contact->find('all', array(
'conditions' => array(
'Contact.id' => $request_id
)
));
$exists = $this->Contact->find('count', array(
'conditions' => array(
'Contact.user_id' => $this->Auth->user('id'),
'Contact.contact_id' => $contact_that_wants_to_add_you_id
)
));
$confirm_contact = $this->Contact->find('first', array(
'conditions' => array(
'Contact.id' => $request_id,
'Contact.user_id' => $contact_that_wants_to_add_you_id,
'Contact.contact_id' => $this->Auth->user('id')
)
));
if($exists == 0 && $confirm == 1){
$exists = $confirm_contact;
$exists['Contact']['id'] = null;
$exists['Contact']['user_id'] = $this->Auth->user('id');
$exists['Contact']['contact_id'] = $contact_that_wants_to_add_you_id;
$exists['Contact']['friend'] = 1;
$exists['Contact']['confirmed'] = 1;
$confirm_contact['Contact']['confirmed'] = 1;
if($this->Contact->save($exists) && $this->Contact->save($confirm_contact)){
$requests = $this->Contact->find('first', array(
'conditions' => array(
'Contact.id' => $this->Contact->getLastInsertID()
)
));
}
}
$this->set('requests',$requests);
}
更新(已修复):
当我重新阅读文档时,解决方案变得非常简单。但是,我仍然不知道为什么会这样,我想知道为什么。如果有人能回答这个问题,我将永远感激不已。
原文:
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
));
修复:
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'counterCache' => false
));
您错误地设置了关联,模型属性只能在构造时初始化模型之前使用。
在那之后你应该使用 Model::bindModel()
,否则关联将缺少默认选项,例如 counterCache
,这可能会导致错误,例如你遇到的错误。
$this->Contact->bindModel(
array(
'belongsTo' => array(
'User' => array(
'className' => '...',
'foreignKey' => '...',
// ...
)
)
),
false
);
另见 Cookbook > Associations> Creating and Destroying Associations on the Fly
我正在为一个项目做一个简单的任务。
它按预期工作,但在(第二个如果)之后,当我在我的联系人模型上使用 find 方法时,它会抛出一条通知:undefined index "counterCache"
。我想修复此通知以防止将来发生崩溃。
我知道我的代码很乱而且没有完美实现(我必须更新模型而且我不能改变所有连接的方式)。
我阅读了 CakePHP 的 API 手册,但我似乎不明白发生了什么。我该如何解决这个通知?
通知:
Notice (8): Undefined index: counterCache [CORE/Cake/Model/Model.php, line 2109]
Notice (8): Undefined index: counterCache [CORE/Cake/Model/Model.php, line 2109]
代码:
public function confirm($request_id = null, $contact_that_wants_to_add_you_id = null, $confirm = 0){
$this->layout = 'dashboard';
$this->User->hasMany=$this->User->belongsTo=$this->User->hasManyAndBelongsTo=array();
$this->Contact->hasMany=$this->Contact->belongsTo=$this->Contact->hasManyAndBelongsTo=array();
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
));
$requests = $this->Contact->find('all', array(
'conditions' => array(
'Contact.id' => $request_id
)
));
$exists = $this->Contact->find('count', array(
'conditions' => array(
'Contact.user_id' => $this->Auth->user('id'),
'Contact.contact_id' => $contact_that_wants_to_add_you_id
)
));
$confirm_contact = $this->Contact->find('first', array(
'conditions' => array(
'Contact.id' => $request_id,
'Contact.user_id' => $contact_that_wants_to_add_you_id,
'Contact.contact_id' => $this->Auth->user('id')
)
));
if($exists == 0 && $confirm == 1){
$exists = $confirm_contact;
$exists['Contact']['id'] = null;
$exists['Contact']['user_id'] = $this->Auth->user('id');
$exists['Contact']['contact_id'] = $contact_that_wants_to_add_you_id;
$exists['Contact']['friend'] = 1;
$exists['Contact']['confirmed'] = 1;
$confirm_contact['Contact']['confirmed'] = 1;
if($this->Contact->save($exists) && $this->Contact->save($confirm_contact)){
$requests = $this->Contact->find('first', array(
'conditions' => array(
'Contact.id' => $this->Contact->getLastInsertID()
)
));
}
}
$this->set('requests',$requests);
}
更新(已修复): 当我重新阅读文档时,解决方案变得非常简单。但是,我仍然不知道为什么会这样,我想知道为什么。如果有人能回答这个问题,我将永远感激不已。
原文:
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
));
修复:
$this->Contact->belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'counterCache' => false
));
您错误地设置了关联,模型属性只能在构造时初始化模型之前使用。
在那之后你应该使用 Model::bindModel()
,否则关联将缺少默认选项,例如 counterCache
,这可能会导致错误,例如你遇到的错误。
$this->Contact->bindModel(
array(
'belongsTo' => array(
'User' => array(
'className' => '...',
'foreignKey' => '...',
// ...
)
)
),
false
);
另见 Cookbook > Associations> Creating and Destroying Associations on the Fly