{"id":20558835,"url":"https://github.com/multicaret/laravel-acquaintances","last_synced_at":"2025-05-14T01:02:53.552Z","repository":{"id":38382140,"uuid":"118595602","full_name":"multicaret/laravel-acquaintances","owner":"multicaret","description":"This package gives Eloquent models the ability to manage friendships (with groups), followships along with Likes, favorites..etc.","archived":false,"fork":false,"pushed_at":"2025-03-23T22:13:11.000Z","size":232,"stargazers_count":831,"open_issues_count":16,"forks_count":74,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-04-06T06:01:20.819Z","etag":null,"topics":["acquaintances","activity","downvote","eloquent-models","favourite","follow","followers","friend-groups","friend-requests","friendship","laravel","laravel-acquaintances","like","mutual-friends","pending-requests","rate","subscribe","subscription","upvote","vote"],"latest_commit_sha":null,"homepage":"https://laravel-news.com/manage-friendships-likes-and-more-with-the-acquaintances-laravel-package","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multicaret.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-23T10:35:28.000Z","updated_at":"2025-03-29T16:06:47.000Z","dependencies_parsed_at":"2022-07-12T02:17:28.313Z","dependency_job_id":"b8707e90-b206-4d1b-adb8-09f3fd74410a","html_url":"https://github.com/multicaret/laravel-acquaintances","commit_stats":{"total_commits":161,"total_committers":23,"mean_commits":7.0,"dds":0.68944099378882,"last_synced_commit":"b4b52b2416b93691cae5084b0a632006247824e4"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multicaret%2Flaravel-acquaintances","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multicaret%2Flaravel-acquaintances/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multicaret%2Flaravel-acquaintances/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multicaret%2Flaravel-acquaintances/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multicaret","download_url":"https://codeload.github.com/multicaret/laravel-acquaintances/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248695310,"owners_count":21146952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acquaintances","activity","downvote","eloquent-models","favourite","follow","followers","friend-groups","friend-requests","friendship","laravel","laravel-acquaintances","like","mutual-friends","pending-requests","rate","subscribe","subscription","upvote","vote"],"created_at":"2024-11-16T03:47:11.265Z","updated_at":"2025-04-13T09:55:02.733Z","avatar_url":"https://github.com/multicaret.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# Laravel Acquaintances\n\n[![Total Downloads](https://img.shields.io/packagist/dt/multicaret/laravel-acquaintances.svg?style=flat-square)](https://packagist.org/packages/multicaret/laravel-acquaintances)\n[![Latest Version](https://img.shields.io/github/release/multicaret/laravel-acquaintances.svg?style=flat-square)](https://github.com/multicaret/laravel-acquaintances/releases)\n[![License](https://poser.pugx.org/multicaret/laravel-acquaintances/license.svg?style=flat-square)](https://packagist.org/packages/multicaret/laravel-acquaintances)\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://cdn.multicaret.com/packages/assets/img/laravel-acquaintances.svg?updated=3\"\u003e\u003c/p\u003e\n\n[Laravel News Article](https://laravel-news.com/manage-friendships-likes-and-more-with-the-acquaintances-laravel-package)\n\nSupports Laravel 10 and below, with no dependencies\n\n## TL;DR\n\nGives eloquent models:\n\n- Friendships \u0026 Groups ability\n- Interactions ability such as:\n    - Likes\n    - Favorites\n    - Reporting\n    - Votes (up/down)\n    - Subscribe\n    - Follow\n    - Ratings\n    - Views\n\nTake this example:\n\n```php\n$user1 = User::find(1);\n$user2 = User::find(2);\n\n$user1-\u003ebefriend($user2);\n$user2-\u003eacceptFriendRequest($user1);\n\n// The messy breakup :(\n$user2-\u003eunfriend($user1);\n\n```\n\n1. [Introduction](#introduction)\n1. [Installation](#installation)\n2. [Friendships:](#friendships)\n    * [Friend Requests](#friend-requests)\n    * [Check Friend Requests](#check-friend-requests)\n    * [Retrieve Friend Requests](#retrieve-friend-requests)\n    * [Retrieve Friends](#retrieve-friends)\n    * [Friend Groups](#friend-groups)\n3. [Interactions](#interactions)\n    * [Traits Usage](#traits-usage)\n    * [Follow](#follow)\n    * [Rate](#rate)\n    * [Like](#like)\n    * [Favorite](#favorite)\n    * [Subscribe](#subscribe)\n    * [Vote](#vote)\n    * [View](#view)\n    * [Parameters](#parameters)\n    * [Query relations](#query-relations)\n    * [Working with model](#working-with-model)\n4. [Events](#events)\n5. [Contributing](#contributing)\n\n## Introduction\n\nThis light package gives Eloquent models the ability to manage their acquaintances and other cool useful stuff. You can\neasily design your social-like System (Facebook, Twitter, Foursquare...etc).\n\n##### Acquaintances includes:\n\n- Send Friend Requests\n- Accept Friend Requests\n- Deny Friend Requests\n- Block a User\n- Group Friends\n- Rate a User or a Model, supporting multiple aspects\n- Follow a User or a Model\n- Like a User or a Model\n- Subscribe a User or a Model\n- Favorite a User or a Model\n- Vote (Upvote \u0026 Downvote a User or a Model)\n- View a User or a Model\n\n---\n\n## Installation\n\nFirst, install the package through Composer.\n\n```sh\ncomposer require multicaret/laravel-acquaintances\n```\n\nLaravel 5.8 and up =\u003e version 2.x (branch master)\n\nLaravel 5.7 and below =\u003e version 1.x (branch v1)\n\nPublish config and migrations:\n\n```sh\nphp artisan vendor:publish --provider=\"Multicaret\\Acquaintances\\AcquaintancesServiceProvider\"\n```\n\nConfigure the published config in:\n\n```\nconfig/acquaintances.php\n```\n\nFinally, migrate the database to create the table:\n\n```sh\nphp artisan migrate\n```\n\n---\n\n## Setup a Model\n\nExample:\n\n```php\nuse Multicaret\\Acquaintances\\Traits\\Friendable;\nuse Multicaret\\Acquaintances\\Traits\\CanFollow;\nuse Multicaret\\Acquaintances\\Traits\\CanBeFollowed;\nuse Multicaret\\Acquaintances\\Traits\\CanLike;\nuse Multicaret\\Acquaintances\\Traits\\CanBeLiked;\nuse Multicaret\\Acquaintances\\Traits\\CanRate;\nuse Multicaret\\Acquaintances\\Traits\\CanBeRated;\n//...\n\nclass User extends Model\n{\n    use Friendable;\n    use CanFollow, CanBeFollowed;\n    use CanLike, CanBeLiked;\n    use CanRate, CanBeRated;\n    //...\n}\n```\n\nAll available APIs are listed below for Friendships \u0026 Interactions.\n\n\n---\n\n## Friendships:\n\n### Friend Requests:\n\nAdd `Friendable` Trait to User model.\n\n```php\nuse Multicaret\\Acquaintances\\Traits\\Friendable;\n\nclass User extends Model\n{\n    use Friendable;\n}\n```\n\n#### Send a Friend Request\n\n```php\n$user-\u003ebefriend($recipient);\n```\n\n#### Accept a Friend Request\n\n```php\n$user-\u003eacceptFriendRequest($sender);\n```\n\n#### Deny a Friend Request\n\n```php\n$user-\u003edenyFriendRequest($sender);\n```\n\n#### Remove Friend\n\n```php\n$user-\u003eunfriend($friend);\n```\n\n#### Block a Model\n\n```php\n$user-\u003eblockFriend($friend);\n```\n\n#### Unblock a Model\n\n```php\n$user-\u003eunblockFriend($friend);\n```\n\n#### Check if Model is Friend with another Model\n\n```php\n$user-\u003eisFriendWith($friend);\n```\n\n### Check Friend Requests:\n\n#### Check if Model has a pending friend request from another Model\n\n```php\n$user-\u003ehasFriendRequestFrom($sender);\n```\n\n#### Check if Model has already sent a friend request to another Model\n\n```php\n$user-\u003ehasSentFriendRequestTo($recipient);\n```\n\n#### Check if Model has blocked another Model\n\n```php\n$user-\u003ehasBlocked($friend);\n```\n\n#### Check if Model is blocked by another Model\n\n```php\n$user-\u003eisBlockedBy($friend);\n```\n\n---\n\n### Retrieve Friend Requests:\n\n#### Get a single friendship\n\n```php\n$user-\u003egetFriendship($friend);\n```\n\n#### Get a list of all Friendships\n\n```php\n$user-\u003egetAllFriendships();\n$user-\u003egetAllFriendships($group_name, $perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of pending Friendships\n\n```php\n$user-\u003egetPendingFriendships();\n$user-\u003egetPendingFriendships($group_name, $perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of accepted Friendships\n\n```php\n$user-\u003egetAcceptedFriendships();\n$user-\u003egetAcceptedFriendships($group_name, $perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of denied Friendships\n\n```php\n$user-\u003egetDeniedFriendships();\n$user-\u003egetDeniedFriendships($perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of blocked Friendships in total\n\n```php\n$user-\u003egetBlockedFriendships();\n$user-\u003egetBlockedFriendships($perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of blocked Friendships by current user\n\n```php\n$user-\u003egetBlockedFriendshipsByCurrentUser();\n$user-\u003egetBlockedFriendshipsByCurrentUser($perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of blocked Friendships by others\n\n```php\n$user-\u003egetBlockedFriendshipsByOtherUsers();\n$user-\u003egetBlockedFriendshipsByOtherUsers($perPage = 20, $fields = ['id','name']);\n```\n\n#### Get a list of pending Friend Requests\n\n```php\n$user-\u003egetFriendRequests();\n```\n\n#### Get the number of Friends\n\n```php\n$user-\u003egetFriendsCount();\n```\n\n#### Get the number of Pending Requests\n\n```php\n$user-\u003egetPendingsCount();\n```\n\n#### Get the number of mutual Friends with another user\n\n```php\n$user-\u003egetMutualFriendsCount($otherUser);\n```\n\n## Retrieve Friends:\n\nTo get a collection of friend models (ex. User) use the following methods:\n\n#### `getFriends()`\n\n```php\n$user-\u003egetFriends();\n// or paginated\n$user-\u003egetFriends($perPage = 20, $group_name);\n// or paginated with certain fields \n$user-\u003egetFriends($perPage = 20, $group_name, $fields = ['id','name']);\n// or paginated with cursor \u0026 certain fields\n$user-\u003egetFriends($perPage = 20, $group_name, $fields = ['id','name'], $cursor = true);\n```\n\nParameters:\n\n* `$perPage`: integer (default: `0`), Get values paginated\n* `$group_name`: string (default: `''`), Get collection of Friends in specific group paginated\n* `$fields`: array (default: `['*']`), Specify the desired fields to query.\n\n#### `getFriendsOfFriends()`\n\n```php\n$user-\u003egetFriendsOfFriends();\n// or\n$user-\u003egetFriendsOfFriends($perPage = 20);\n// or \n$user-\u003egetFriendsOfFriends($perPage = 20, $fields = ['id','name']);\n```\n\nParameters:\n\n* `$perPage`: integer (default: `0`), Get values paginated\n* `$fields`: array (default: `['*']`), Specify the desired fields to query.\n\n#### `getMutualFriends()`\n\nGet mutual Friends with another user\n\n```php\n$user-\u003egetMutualFriends($otherUser);\n// or \n$user-\u003egetMutualFriends($otherUser, $perPage = 20);\n// or \n$user-\u003egetMutualFriends($otherUser, $perPage = 20, $fields = ['id','name']);\n```\n\nParameters:\n\n* `$other`: Model (required), The Other user model to check mutual friends with\n* `$perPage`: integer (default: `0`), Get values paginated\n* `$fields`: array (default: `['*']`), Specify the desired fields to query.\n\n## Friend Groups:\n\nThe friend groups are defined in the `config/acquaintances.php` file. The package comes with a few default groups. To\nmodify them, or add your own, you need to specify a `slug` and a `key`.\n\n```php\n// config/acquaintances.php\n//...\n'groups' =\u003e [\n    'acquaintances' =\u003e 0,\n    'close_friends' =\u003e 1,\n    'family' =\u003e 2\n];\n```\n\nSince you've configured friend groups, you can group/ungroup friends using the following methods.\n\n#### Group a Friend\n\n```php\n$user-\u003egroupFriend($friend, $group_name);\n```\n\n#### Remove a Friend from family group\n\n```php\n$user-\u003eungroupFriend($friend, 'family');\n```\n\n#### Remove a Friend from all groups\n\n```php\n$user-\u003eungroupFriend($friend);\n```\n\n#### Get the number of Friends in specific group\n\n```php\n$user-\u003egetFriendsCount($group_name);\n```\n\n#### To filter `friendships` by group you can pass a group slug.\n\n```php\n$user-\u003egetAllFriendships($group_name);\n$user-\u003egetAcceptedFriendships($group_name);\n$user-\u003egetPendingFriendships($group_name);\n...\n```\n\n## Interactions\n\n### Traits Usage:\n\nAdd `CanXXX` Traits to User model.\n\n```php\nuse Multicaret\\Acquaintances\\Traits\\CanFollow;\nuse Multicaret\\Acquaintances\\Traits\\CanLike;\nuse Multicaret\\Acquaintances\\Traits\\CanFavorite;\nuse Multicaret\\Acquaintances\\Traits\\CanSubscribe;\nuse Multicaret\\Acquaintances\\Traits\\CanVote;\n\nclass User extends Model\n{\n    use CanFollow, CanLike, CanFavorite, CanSubscribe, CanVote;\n}\n```\n\nAdd `CanBeXXX` Trait to target model, such as 'Post' or 'Book' ...:\n\n```php\nuse Multicaret\\Acquaintances\\Traits\\CanBeLiked;\nuse Multicaret\\Acquaintances\\Traits\\CanBeFavorited;\nuse Multicaret\\Acquaintances\\Traits\\CanBeVoted;\nuse Multicaret\\Acquaintances\\Traits\\CanBeRated;\n\nclass Post extends Model\n{\n    use CanBeLiked, CanBeFavorited, CanBeVoted, CanBeRated;\n}\n```\n\nAll available APIs are listed below.\n\n### Follow\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanFollow`\n\n```php\n$user-\u003efollow($targets);\n$user-\u003eunfollow($targets);\n$user-\u003etoggleFollow($targets);\n$user-\u003efollowings()-\u003eget(); // App\\User:class\n$user-\u003efollowings(App\\Post::class)-\u003eget();\n$user-\u003eisFollowing($target);\n$object-\u003efollowingCount(); // or as attribute $object-\u003efollowing_count\n$object-\u003efollowingCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeFollowed`\n\n```php\n$object-\u003efollowers()-\u003eget();\n$object-\u003eisFollowedBy($user);\n$object-\u003efollowersCount(); // or as attribute $object-\u003efollowers_count\n$object-\u003efollowersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### Rate\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanRate`\n\n```php\n// Rate type in the following line will be\n// the same as the one specified\n// in config('acquaintances.rating.defaults.type')\n// if your app is using a single type of rating on your model,\n// like one factor only, then simply use the rate() as it's shown here,\n// and if you have multiple factors then\n// take a look the examples exactly below this these ones. \n$user-\u003erate($targets);\n$user-\u003eunrate($targets);\n$user-\u003etoggleRate($targets);\n$user-\u003eratings()-\u003eget(); // App\\User:class\n$user-\u003eratings(App\\Post::class)-\u003eget();\n$user-\u003ehasRated($target);\n\n// Some Examples on how to rate the object based on different factors (rating type)\n$user-\u003esetRateType('bedside-manners')-\u003erate($target, 4);\n$user-\u003esetRateType('waiting-time')-\u003erate($target, 3);\n$user-\u003esetRateType('quality')-\u003erate($target, 4);\n$user-\u003esetRateType('delivery-time')-\u003erate($target, 2);\n$user-\u003esetRateType('communication')-\u003erate($target, 5);\n// Remember that you can always use the functions on $target which have this phrase \"AllTypes\" in them. check the below section for more details\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeRated`\n\n```php\n$object-\u003eraters()-\u003eget();\n$object-\u003eisRatedBy($user);\n\n$object-\u003eaverageRating(); // or as attribute $object-\u003eaverage_rating\n$object-\u003eaverageRatingAllTypes(); // or as attribute $object-\u003eaverage_rating_all_types\n\n$object-\u003esumRating(); // or as attribute $object-\u003esum_rating\n$object-\u003esumRatingAllTypes(); // or as attribute $object-\u003esum_rating_all_types_all_types\n\n$object-\u003esumRatingReadable(); // return readable number with precision, i.e: 5.2K\n$object-\u003esumRatingAllTypesReadable(); // return readable number with precision, i.e: 5.2K\n\n\n$object-\u003eratingPercent($max = 5); // calculating the percentage based on the passed coefficient\n$object-\u003eratingPercentAllTypes($max = 5); // calculating the percentage based on the passed coefficient\n\n// User Related: \n\n$object-\u003euserAverageRatingAllTypes(); // or as attribute $object-\u003euser_average_rating_all_types\n\n$object-\u003euserSumRatingAllTypes(); // or as attribute $object-\u003euser_sum_rating_all_types\n\n$object-\u003euserSumRatingReadable(); // return readable number with precision, i.e: 5.2K\n$object-\u003euserSumRatingAllTypesReadable(); // return readable number with precision, i.e: 5.2K\n\n\n```\n\n### Like\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanLike`\n\n```php\n$user-\u003elike($targets);\n$user-\u003eunlike($targets);\n$user-\u003etoggleLike($targets);\n$user-\u003ehasLiked($target);\n$user-\u003elikes()-\u003eget(); // default object: App\\User:class\n$user-\u003elikes(App\\Post::class)-\u003eget();\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeLiked`\n\n```php\n$object-\u003elikers()-\u003eget();\n$object-\u003efans()-\u003eget(); // or $object-\u003efans. it's an alias of likers()\n$object-\u003eisLikedBy($user);\n$object-\u003elikersCount(); // or as attribute $object-\u003elikers_count\n$object-\u003elikersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### Favorite\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanFavorite`\n\n```php\n$user-\u003efavorite($targets);\n$user-\u003eunfavorite($targets);\n$user-\u003etoggleFavorite($targets);\n$user-\u003ehasFavorited($target);\n$user-\u003efavorites()-\u003eget(); // App\\User:class\n$user-\u003efavorites(App\\Post::class)-\u003eget();\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeFavorited`\n\n```php\n$object-\u003efavoriters()-\u003eget(); // or $object-\u003efavoriters \n$object-\u003eisFavoritedBy($user);\n$object-\u003efavoritersCount(); // or as attribute $object-\u003efavoriters_count\n$object-\u003efavoritersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n\n### Reporting\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanReport`\n\n```php\n$user-\u003ereport($targets);\n$user-\u003eunreport($targets);\n$user-\u003etoggleReport($targets);\n$user-\u003ehasReported($target);\n$user-\u003ereports()-\u003eget(); // App\\User:class\n$user-\u003ereports(App\\Post::class)-\u003eget();\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeReported`\n\n```php\n$object-\u003ereporters()-\u003eget(); // or $object-\u003ereporters\n$object-\u003eisReportedBy($user);\n$object-\u003ereportersCount(); // or as attribute $object-\u003ereporters_count\n$object-\u003ereportersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### Subscribe\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanSubscribe`\n\n```php\n$user-\u003esubscribe($targets);\n$user-\u003eunsubscribe($targets);\n$user-\u003etoggleSubscribe($targets);\n$user-\u003ehasSubscribed($target);\n$user-\u003esubscriptions()-\u003eget(); // default object: App\\User:class\n$user-\u003esubscriptions(App\\Post::class)-\u003eget();\n```\n\n#### `Multicaret\\Acquaintances\\Traits\\CanBeSubscribed`\n\n```php\n$object-\u003esubscribers(); // or $object-\u003esubscribers \n$object-\u003eisSubscribedBy($user);\n$object-\u003esubscribersCount(); // or as attribute $object-\u003esubscribers_count\n$object-\u003esubscribersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### Vote\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanVote`\n\n```php\n$user-\u003evote($target); // Vote with 'upvote' for default\n$user-\u003eupvote($target);\n$user-\u003edownvote($target);\n$user-\u003ecancelVote($target);\n$user-\u003ehasUpvoted($target);\n$user-\u003ehasDownvoted($target);\n$user-\u003evotes(App\\Post::class)-\u003eget();\n$user-\u003eupvotes(App\\Post::class)-\u003eget();\n$user-\u003edownvotes(App\\Post::class)-\u003eget();\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeVoted`\n\n```php\n$object-\u003evoters()-\u003eget();\n$object-\u003eisVotedBy($user);\n$object-\u003evotersCount(); // or as attribute $object-\u003evoters_count\n$object-\u003evotersCountReadable(); // return readable number with precision, i.e: 5.2K\n\n$object-\u003eupvoters()-\u003eget();\n$object-\u003eisUpvotedBy($user);\n$object-\u003eupvotersCount(); // or as attribute $object-\u003eupvoters_count\n$object-\u003eupvotersCountReadable(); // return readable number with precision, i.e: 5.2K\n\n$object-\u003edownvoters()-\u003eget();\n$object-\u003eisDownvotedBy($user);\n$object-\u003edownvotersCount(); // or as attribute $object-\u003edownvoters_count\n$object-\u003edownvotersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### View\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanView`\n\n```php\n$user-\u003eview($targets);\n$user-\u003eunview($targets);\n$user-\u003etoggleView($targets);\n$user-\u003ehasViewed($target);\n$user-\u003eviewers()-\u003eget(); // default object: App\\User:class\n$user-\u003eviewers(App\\Post::class)-\u003eget();\n```\n\n#### `\\Multicaret\\Acquaintances\\Traits\\CanBeViewed`\n\n```php\n$object-\u003eviewers()-\u003eget();\n$object-\u003eisViewedBy($user);\n$object-\u003eviewersCount(); // or as attribute $object-\u003eviewers_count\n$object-\u003eviewersCountReadable(); // return readable number with precision, i.e: 5.2K\n```\n\n### Parameters\n\nAll the above mentioned methods of creating relationships, such as 'follow', 'like', 'unfollow', 'unlike', their syntax\nis as follows:\n\n```php\nfollow(array|int|\\Illuminate\\Database\\Eloquent\\Model $targets, $class = __CLASS__)\n```\n\nSo you can call them like this:\n\n```php\n// id / int|array\n$user-\u003efollow(1); // targets: 1, $class = App\\User\n$user-\u003efollow(1, App\\Post::class); // targets: 1, $class = App\\Post\n$user-\u003efollow([1, 2, 3]); // targets: [1, 2, 3], $class = App\\User\n\n// Model\n$post = App\\Post::find(7);\n$user-\u003efollow($post); // targets: $post-\u003eid, $class = App\\Post\n\n// Model array\n$posts = App\\Post::popular()-\u003eget();\n$user-\u003efollow($posts); // targets: [1, 2, ...], $class = App\\Post\n```\n\n### Query relations\n\n```php\n$followers = $user-\u003efollowers;\n$followers = $user-\u003efollowers()-\u003ewhere('id', '\u003e', 10)-\u003eget();\n$followers = $user-\u003efollowers()-\u003eorderByDesc('id')-\u003eget();\n$followers = $user-\u003efollowers()-\u003epaginate(10);\n```\n\nYou may use the others in the same way.\n\n### Working with model\n\n```php\nuse Multicaret\\Acquaintances\\Models\\InteractionRelation;\n\n// Get most popular object\n// 1- All types\n$relations = InteractionRelation::popular()-\u003eget();\n\n// 2- subject_type = App\\Post\n$relations = InteractionRelation::popular(App\\Post::class)-\u003eget(); \n\n// 3- subject_type = App\\User\n$relations = InteractionRelation::popular('user')-\u003eget();\n \n// 4- subject_type = App\\Post\n$relations = InteractionRelation::popular('post')-\u003eget();\n\n// 5- Pagination\n$relations = InteractionRelation::popular(App\\Post::class)-\u003epaginate(15); \n\n```\n\n## Events\n\nThis is the list of the events fired by default for each action:\n\n| Event name                    | Fired                                         |\n|-------------------------------|-----------------------------------------------|\n| acq.friendships.sent          | When a friend request is sent                 |\n| acq.friendships.accepted      | When a friend request is accepted             |\n| acq.friendships.denied        | When a friend request is denied               |\n| acq.friendships.blocked       | When a friend is blocked                      |\n| acq.friendships.unblocked     | When a friend is unblocked                    |\n| acq.friendships.cancelled     | When a friendship is cancelled                |\n| acq.ratings.rate              | When a an item or items get Rated             |\n| acq.ratings.unrate            | When a an item or items get unRated           |\n| acq.vote.up                   | When a an item or items get upvoted           |\n| acq.vote.down                 | When a an item or items get downvoted         |\n| acq.vote.cancel               | When a an item or items get vote cancellation |\n| acq.likes.like                | When a an item or items get liked             |\n| acq.likes.unlike              | When a an item or items get unliked           |\n| acq.followships.follow        | When a an item or items get followed          |\n| acq.followships.unfollow      | When a an item or items get unfollowed        |\n| acq.favorites.favorite        | When a an item or items get favored           |\n| acq.favorites.unfavorite      | When a an item or items get unfavored         |\n| acq.reports.report            | When a an item or items get reported          |\n| acq.reports.unreport          | When a an item or items get unreported        |\n| acq.subscriptions.subscribe   | When a an item or items get subscribed        |                 \n| acq.subscriptions.unsubscribe | When a an item or items get unsubscribed      | \n| acq.views.view                | When a an item or items get viewed            |\n| acq.views.unview              | When a an item or items get unviewed          |                \n\n### Contributing\n\nSee the [CONTRIBUTING](CONTRIBUTING.md) guide.\n\nThe initial version of this library was assisted by the following\nrepos [laravel-friendships](https://github.com/hootlex/laravel-friendships)\n\u0026 [laravel-follow](https://github.com/overtrue/laravel-follow).\n\n### Change Log\n\nSee the [log](CHANGELOG.md) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmulticaret%2Flaravel-acquaintances","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmulticaret%2Flaravel-acquaintances","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmulticaret%2Flaravel-acquaintances/lists"}