- PHP >= 8.1 required — dropped PHP 8.0 support.
- Strict return types — all trait and model methods now declare explicit return types. If you override any method from the package traits, update your signatures accordingly.
un*()methods returnint—unlike(),unfollow(),unfavorite(),unsubscribe(),unview(),unreport(), andunrate()now returnint(detached count) instead ofarray.
- feat: UUID / ULID morph support — configurable
morph_typeper table (morphs,uuidMorphs,ulidMorphs) via theinteractions_morph_type,friendships_morph_type,verifications_morph_type, and related config keys. - feat: Caching layer — new
cacheconfig section withenabled,store, andttloptions.Interaction::isRelationExists()now uses an in-memory request cache and an optional persistent cache (Cache::remember) with automatic invalidation on attach/detach/toggle. - feat:
withAcquaintanceCounts()Eloquent Builder macro — newAcquaintanceScopesclass registers a macro to eager-load interaction counts (likers, followers, subscribers, etc.) in a single query. - feat:
HasAcquaintanceCounterstrait — auto-increment/decrement cached counter columns (e.g.likes_count,followers_count) on the model's table when interactions change. - feat:
AcquaintancesCleanupJob— queued job to clean up all acquaintance data for a deleted model without blocking the request. - feat: Morph map registration — the service provider now registers morph maps for
Friendship,FriendshipGroups,Verification,VerificationGroups, andInteractionRelationmodels automatically, withRelation::enforceMorphMap()support. - feat: Interactions-only mode — new
featuresconfig section (interactions,friendships,verifications) to selectively enable/disable features. Disabled features skip migration loading and publishing. Granular publish tags added:acquaintances-migrations-interactions,acquaintances-migrations-friendships,acquaintances-migrations-verifications. - feat: Custom User model support — new
user_model_class_nameconfig key allows specifying a fully qualified User model class (e.g.,App\Models\Core\User) for projects with non-standard model locations.
- perf: Database indexes — added composite and unique indexes on interactions, friendships, and verifications tables for faster lookups.
- refactor: Migrations converted to anonymous classes — following Laravel 9+ conventions.
- refactor:
DB::transaction()wrappers —blockFriend()andblockVerification()now run inside database transactions for atomicity. - refactor: Laravel 13 support — added
^13.0to Illuminate component constraints. - test: MySQL test infrastructure — all tests now run against MySQL via Orchestra Testbench; event tests modernized from Mockery to
Event::fake().
- fix: PHP 8.4 compatibility: Add explicit nullable type declaration for followingCountReadable
- fix: RELATION_REPORT instead of RELATION_FAVORITE in
CanBeReportedclass. #117
- fix: numberToReadable will return an int if the $shorthand is empty.
- feat: new trait for reporting added by @jayenne. PR #116
- feat: new functions added
followingCount()andfollowingCountReadable()thanks to @jayenne <3. PR #115
- use config variable
interactions_user_id_fk_column_namePR #109
- Bump Laravel support to V11.
- feat: adding a way to get a list of blocked Friendships by current user by @mercExec
- feat: adding a way to get a list of blocked Friendships by others by @mercExec
- feat: adding get pending count function by @prawn185
- fix: solve isRelationExists causing potential ambiguous errors when doing some complex DB queries. by @midblep
- Laravel 10 Support - composer-wise not fully support, and no PHP 8.1 types or anything fancy here
- fix: findFriendships with params
sender&recipientwere not working, fixed by @beratkara
- feat: add cursor paginate support to
getFriendsandgetOrPaginate
- fix: make interaction relation_value type a double, better for rating values.
- fix: rating a non-custom type (AKA
config('acquaintances.rating.defaults.type')) just after a custom type rating, will leave to an odd behavior
- feat: allow user to turn off migrations, thanks to @jaulz
- fix: deprecated method studly_case() PR #53, thanks to @Forsakenrox
- fix: Trait helper method morph key of 'ratingsTo'.
- fix: rename collision method name 'ratings' to 'ratingsTo'
- feat: change the naming of migration files to be prefixed with the current time.
- fix: friendship_id column type
- fix: use custom model for downvotes
- fix: read pivot id
- fix: in interaction table add update_at timestamp column
- feat: allow empty model namespace
- fix: add helper methods for all models
- feat: allow all models to be configured
- fix: use models from config
- fix: set default user model to User
- along with other fixes
- feat: add view relation
- feat: add CanBeViewed trait
- feat: add CanView trait
- docs: extend readme
- docs: add missing events
- fix: fix typo
- feat: extend relation map
- fix: add option for custom column name
- feat: add helper method to get user model name
- fix: use helper method to get user model name
- fix: remove obsolete imports
- fix: add Str import
- fix: fix comments in config
- fix: use helper method to get user model name
- fix: use new helper method to get user model name
- fix: use new helper method get user model name
- fix: use new helper method get user model name
- fix: use new helper method get user model name
- fix: use new helper method get user model name
- minor fix. Replaced
str_pluralwithStr::plural.
- Added
ratings()&ratingsPure()to CanBeRated model - Added user model name to configs
user_model_class_name - Added user relation to InteractionRelation model
- Fixed the logic of allTypes post-fixed functions.
-
Removed avoiding querying ratings when the type is set to overall
-
Fixed the value of
userSumRatingReadable()function in CanBeRated trait. -
Fixed
userSumRatingReadable()function inCanBeRatedtrait. -
Add new functions to
CanBeRatedtrait:- averageRatingAllTypes()
- sumRatingAllTypes()
- sumRatingAllTypesReadable()
- userAverageRatingAllTypes()
- userSumRatingAllTypes()
- userSumRatingAllTypesReadable()
- ratingPercentAllTypes()
- getAverageRatingAllTypesAttribute()
- getSumRatingAllTypesAttribute()
- getUserAverageRatingAllTypesAttribute()
- getUserSumRatingAllTypesAttribute()
-
Added a proper param type hint for the $target param in the following traits
- CanBeFavorited
- CanBeFollowed
- CanBeLiked
- CanBeRated
- CanBeSubscribed
- CanBeVoted
- CanFavorite
- CanFollow
- CanLike
- CanRate
- CanSubscribe
- CanVote
- Made the
user_idFK type dynamic and part of configurations
- Changed the package's company - since I renamed my brand
- PHP 7.1 is the minimum requirement now
- Supporting Laravel 5.8 by replacing
Event::firewithEvent::dispatch - Fixing an issue with foreign key constraint when running migrations
- Adding rating system feature
- Remote soft deletion and updated_at timestamp
- Adding
numberToReadable()function to as helper - Enhance logic by adding more columns
- Adding
CanBeFavoritedtrait now includes:favoriters_countfavoriters countfavoritersCountReadable()return favoriters count in readable formatfavoriters_count_readablefavoriters count readable attribute added
- Adding
CanBeFollowedtrait now includes:followers_countfollowers countfollowersCountReadable()return followers count in readable formatfollowers_count_readablefollowers count readable attribute added
- Adding
CanBeLikedtrait now includes:likers_countlikers countlikersCountFormmated()changed return type to readable number, and adding an alias to itlikersCountReadable()likers_count_readablelikers count readable attribute added
- Adding
CanBeSubscribedtrait now includes:subscribers_countsubscribers countsubscribersCountReadable()return subscribers count in readable formatsubscribers_count_readablesubscribers count readable attribute added
- Adding
CanBeSubscribedtrait now includes:voters_countvoters countvotersCountReadable()return voters count in readable formatvoters_count_readablevoters count readable attribute added
- Adding
CanBeSubscribedtrait now includes:upvoters_countupvoters countupvotersCountReadable()return upvoters count in readable formatupvoters_count_readableupvoters count readable attribute added
- Adding
CanBeSubscribedtrait now includes:downvoters_countdownvoters countdownvotersCountReadable()return downvoters count in readable formatdownvoters_count_readabledownvoters count readable attribute added
- Fix errors
- Enhance logic
- Smart/less configurations
- Minor change in the name of migrations files
- Initial Release