CakePHP – CounterCache

Przechowuje w tabeli ilość rekordów podrzędnych (dzieci). Definiowany jest na tabeli podrzędnej ( belongsTo() ). Tabela nadrzędna musi mieć kolumnę typu int (np. comment_count)

class CommentsTable extends Table
{
  public function initialize(array $config)
  {
    $this->belongsTo('Articles');

    $this->addBehavior('CounterCache' , [
    'Articles' => [ 'comment_count' ]
    ]);
  }
}

Można zastosować CounterCache w powiązaniach belongsToMany() tylko z opcją through. Wówczas behaviour definiuje się w tabeli łączącej gdyż posiada powiązania belongsTo().

Wprowadzenie warunku – zlicza tylko komentarze bez spamu

$this->addBehavior('CounterCache' , [
  'Articles' => [
    'comment_count' => [
      'conditions' => [ 'Comments.spam' => false]
    ]
  ]
]);

Dodaj komentarz