original_string: public function afterSave(Event $event, EntityInterface $entity, $options)
      {
          if (isset($options['ignoreCounterCache']) && $options['ignoreCounterCache'] === true) {
              return;
          }
  
          $this->_processAssociations($event, $entity);
          $this->_ignoreDirty = [];
      }
code: public function afterSave(Event $event, EntityInterface $entity, $options)
      {
          if (isset($options['ignoreCounterCache']) && $options['ignoreCounterCache'] === true) {
              return;
          }
  
          $this->_processAssociations($event, $entity);
          $this->_ignoreDirty = [];
      }
code_tokens: public function afterSave ( Event $ event , EntityInterface $ entity , $ options ) { if ( isset ( $ options [ 'ignoreCounterCache' ] ) && $ options [ 'ignoreCounterCache' ] === true ) { return ; } $ this -> _processAssociations ( $ event , $ entity ) ; $ this -> _ignoreDirty = [ ] ; }
docstring: afterSave callback.
  
  Makes sure to update counter cache when a new record is created or updated.
  
  @param \Cake\Event\Event $event The afterSave event that was fired.
  @param \Cake\Datasource\EntityInterface $entity The entity that was saved.
  @param \ArrayObject $options The options for the query
  @return void
docstring_tokens: afterSave callback .