Неопределенный индекс «counterCache» CakePHP

0

Я выполняю простую задачу для проекта. Он работает так, как ожидалось, но после (второй если), когда я использую метод 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'
));

Fix:

$this->Contact->belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'counterCache' => false
));
  • 1
    В будущем, пожалуйста, не публикуйте сообщения об ошибках (или любой текст) в изображениях - их нельзя искать.
  • 1
    Также, пожалуйста, всегда указывайте точную версию CakePHP! Не имея возможности понять, на что указывает ошибка, людям будет трудно помогать вам.
Теги:
methods
cakephp
model

1 ответ

0
Лучший ответ

Вы неправильно устанавливаете ассоциации, свойства модели должны использоваться только до того, как модель будет инициализирована во время строительства.

После этого вы должны использовать Model::bindModel(), иначе ассоциации не будут иметь параметры по умолчанию, такие как counterCache, что может привести к ошибкам, таким как тот, который вы испытываете.

$this->Contact->bindModel(
    array(
        'belongsTo' => array(
            'User' => array(
                'className' => '...',
                'foreignKey' => '...',
                // ...
            )
        )
    ),
    false
);

См. Также Поваренную книгу> Ассоциации> Создание и уничтожение ассоциаций на лету

Ещё вопросы

Сообщество Overcoder
Наверх
Меню