承接 corepine/actions 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

corepine/actions

最新稳定版本:v0.1.1

Composer 安装命令:

composer require corepine/actions

包简介

Polymorphic action tracking for Laravel (likes, dislikes, reactions) with synced counters.

README 文档

README

corepine/actions is a Laravel package for polymorphic user actions (upvotes, downvotes, reactions) with synced aggregate counters.

Install

composer require corepine/actions
php artisan actions:install

This publishes:

  • config/corepine-actions.php
  • actions migrations
  • app/Casts/ActionType.php cast stub

Optional flags:

php artisan actions:install --migrate
php artisan actions:install --force

Quick Start (Service / Facade)

use Corepine\Actions\Facades\Actions;

$isUpvoted = Actions::for($comment)->by($user)->upvote(); // true = set, false = removed
$isDownvoted = Actions::for($comment)->by($user)->downvote();

Actions::for($comment)->by($user)->reaction('👋');
Actions::for($comment)->by($user)->reaction(null); // remove reaction

$upvotes = Actions::for($comment)->count('upvote');
$downvotes = Actions::for($comment)->count('downvote');

Custom Action Types

Option A: add extra types directly in config:

'action_types' => ['bookmark'],

Option B: publish app/Casts/ActionType.php, override types(), and point config:

'action_type_cast' => \App\Casts\ActionType::class,

If you omit action_type_cast, the package uses Corepine\Actions\Casts\ActionType by default.

Then use custom actions:

Actions::for($comment)->by($user)->toggle('bookmark');
Actions::for($comment)->count('bookmark');

HasActions Concern

Use the built-in concern on your actionable models:

use Corepine\Actions\Models\Concerns\HasActions;

class Comment extends Model
{
    use HasActions;
}

Then call helpers directly from the model:

$comment->upvoteBy($user);
$comment->downvoteBy($user);
$comment->reactBy($user, '👋');

$comment->upvotedBy($user);
$comment->upvotesCount();
$comment->formattedUpvotesCount();
$comment->syncAllActionCounts();

// Manual cleanup for this actionable:
$comment->clearActionsAndCounts();

// Alias:
$comment->deleteActionsAndCounts();

When the actionable model is deleted, HasActions auto-cleans related actions and action_counts rows.

Reaction Groups (Render Ready)

For emoji reaction chips like 👋 6 or ❤️ 2.5K, use grouped reactions:

$groups = $comment->reactionGroups();

// Each item has:
// ['reaction' => '👋', 'count' => 6, 'formatted_count' => '6']
// ['reaction' => '❤️', 'count' => 2500, 'formatted_count' => '2.5K']

If you already have a precomputed count, format it directly:

$comment->formattedReactionsCount(2500); // 2.5K

Counter Consistency

Counters are stored in action_counts and updated automatically from Action model created/deleted events (including service writes).

If you need to rebuild counters for a specific model:

Actions::for($comment)->syncAllCounts();

If you want syncAllCounts() to include custom zero-bucket types, append them:

Actions::for($comment)->syncAllCounts(['bookmark']);

If you need to delete everything for one actionable and keep tables in sync:

Actions::for($comment)->clear();

Tables

  • actions: one row per actor + actionable + type
  • action_counts: aggregate count per actionable + type

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-08

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固