major-phyo-san/prevent-same-shit 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

major-phyo-san/prevent-same-shit

Composer 安装命令:

composer require major-phyo-san/prevent-same-shit

包简介

"Prevent duplicate database records by calculating SHA256 hash for each database entry"

README 文档

README

Latest Version on Packagist Total Downloads License

Introduction

Prevent Same Shit is a Laravel package (based on Laravel 10) that provides a simple and efficient way to prevent duplicate database records. It helps developers handling of duplications of each record at database level, making their work easier and more efficient.

What It Does

This package generates 'record_hash' (or if you prefer, your custom hash_column_name) database columns for Eloquent models. The 'record_hash' column stores SHA256 hash for each database entry of a specific models. When there's a new record entry, the package will calculate the hash value of the new record, checking it against the existing hash values and if any duplication exists, prevent the entry of the new record.

Installation

You can install the package via Composer:

composer require major-phyo-san/prevent-same-shit

Laravel uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider. But for the standard documentation purpose, the following is the package discovery.

php artisan vendor:publish --provider="MajorPhyoSan\\PreventSameShit\\PreventSameShitServiceProvider"

Usage

The HasRowHash trait will handle record hashing and checking if duplicated record exists based on the hash value automatically. All you need to do is to use the trait in your Eloquent model. The model using the trait must have the 'record_hash' [string, nullable] (or your custom hash column name, just don't forget to provide your custom hash column name in the model) column.

Example

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

use MajorPhyoSan\PreventSameShit\Traits\HasRowHash;

class Product extends Model
{
    use SoftDeletes, HasRowHash;
}

The behavior of HasRowHash trait can be manipulated using three properties: $recordHashColumn, $excludedFromHash and $includedInHash. You must provide $recordHashColumn property if you customized the hash column's name (like $recordHashColumn = "sha_256_val";). The $excludedFromHash property tells the trait to ignore some columns when checking for duplication in the database table. For example, if you want to exclude 'provider_id' and 'entry_date' columns when hash checking the records, you just have to add a model attribute (an array) named $excludedFromHash and provide column names to be excluded.

$excludedFromHash = ['provider_id','entry_date']; // those columns will be ignored from checking

Note that 'id', 'record_hash', 'created_at' and 'updated_at' columns have been ignored by default.

The $includedInHash property does the opposite of the $excludedFromHash property. It tells the trait to only include specified columns when hash checking.

$includedInHash = ['name','category_id']; // those columns will be the only columns for checking duplication

Cli Usage

If your project has been completed and/or in the development process and want to integrate this package, you can do so by the commands provided by the package.

Genreate hash column for a model

php artisan prevent-same-shit:generate-hash-column App\\Models\\YourModel hash_column_name

The above command generates a migration file to add a hash column in the database table. The first arg for the above command is the target model. You should provide fully qualified model class. Or if you've implemented morph map in the AppServiceProvider, you can provide morp mapped name of the model. The second parameter is optional for the hash column name, and if you provide the custom name for the model, that name will stick througout the model's hash calculation and checking. You must set the model's $recordHashColumn property to the name of the hash column.

Genreate hash column for all models

php artisan prevent-same-shit:generate-hash-columns hash_column_name

The above command generates migration files to add a hash column for each of the models in your project. The second arg is optional for the hash column name.

Genreate hash values

php artisan prevent-same-shit:generate-hashes App\\Models\\YourModel hash_column_name

The above command generates hash values for a specified model. The second arg is only required for those who customized the hash column name.

Genreate hash values for all models

php artisan prevent-same-shit:generate-hashes-all hash_column_name

The above command generates hash values for all of the models and don't need to provide model name. And again, the hash_column_name arg is only required for those who customized the hash column name.

Contributing

You can visit https://github.com/major-phyo-san/prevent-same-shit and contribute the project.

major-phyo-san/prevent-same-shit 适用场景与选型建议

major-phyo-san/prevent-same-shit 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 30 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 04 月 30 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 major-phyo-san/prevent-same-shit 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 major-phyo-san/prevent-same-shit 我们能提供哪些服务?
定制开发 / 二次开发

基于 major-phyo-san/prevent-same-shit 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-04-30