CategoryBehavior.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: NODELOG
  5. * Date: 2017/3/12
  6. * Time: 下午4:36
  7. */
  8. namespace common\behaviors;
  9. use yii\base\Behavior;
  10. use yii\db\ActiveRecord;
  11. use common\models\Category;
  12. class CategoryBehavior extends Behavior
  13. {
  14. public function events()
  15. {
  16. return [
  17. // ActiveRecord::EVENT_AFTER_DELETE => [$this, 'afterDeleteInternal'],
  18. SoftDeleteBehavior::EVENT_AFTER_SOFT_DELETE => [$this, 'afterSoftDeleteInternal'],
  19. SoftDeleteBehavior::EVENT_AFTER_RESTORE => [$this, 'afterRestoreInternal'],
  20. ActiveRecord::EVENT_AFTER_INSERT => [$this, 'afterInsertInternal'],
  21. ActiveRecord::EVENT_AFTER_UPDATE => [$this, 'afterUpdateInternal'],
  22. ];
  23. }
  24. /**
  25. * 软删除文章后(更新分类文章数)
  26. */
  27. public function afterSoftDeleteInternal($event)
  28. {
  29. Category::updateAllCounters(['article' => -1], ['id' => $event->sender->category_id]);
  30. }
  31. /**
  32. * 软删除文章还原后(更新分类文章数)
  33. */
  34. public function afterRestoreInternal($event)
  35. {
  36. Category::updateAllCounters(['article' => 1], ['id' => $event->sender->category_id]);
  37. }
  38. /**
  39. * 发布新文章后(更新分类文章数)
  40. */
  41. public function afterInsertInternal($event)
  42. {
  43. Category::updateAllCounters(['article' => 1], ['id' => $event->sender->category_id]);
  44. }
  45. /**
  46. * 修改文章后(如果修改了分类,更新分类文章数)
  47. */
  48. public function afterUpdateInternal($event) {
  49. $changedAttributes = $event->changedAttributes;
  50. if (isset($changedAttributes['category_id'])) {
  51. Category::updateAllCounters(['article' => 1], ['id' => $event->sender->category_id]);
  52. Category::updateAllCounters(['article' => -1], ['id' => $changedAttributes['category_id']]);
  53. }
  54. }
  55. }