GithubHelp home page GithubHelp logo

hypefactors / laravel-follow Goto Github PK

View Code? Open in Web Editor NEW
49.0 6.0 5.0 77 KB

Laravel Follow System for Eloquent models.

Home Page: https://hypefactors.com

License: BSD 3-Clause "New" or "Revised" License

PHP 100.00%
php laravel followers

laravel-follow's Introduction

Laravel Follow

Build Status Software License Latest Version on Packagist Total Downloads

Laravel 10 Follow System for Eloquent models.

This package is compliant with the FIG standards PSR-1, PSR-2 and PSR-4 to ensure a high level of interoperability between shared PHP. If you notice any compliance oversights, please send a patch via pull request.

Version Matrix

Version Laravel PHP Version
9.x 10.x >= 8.1
8.x 9.x >= 8.0
7.x 8.x >= 7.3
6.x 7.x >= 7.2.5
5.x 6.x >= 7.2
4.x 5.8.x >= 7.1
3.x 5.7.x >= 7.1
2.x 5.6.x >= 7.1
1.x 5.5.x >= 7.0

Installation

You can install the package via composer:

composer require hypefactors/laravel-follow

The package will be automatically registered.

Now you need to run the migrations:

php artisan migrate

Usage

Preparing the Eloquent Models

To allow an entity to be followed or to follow other entities, the corresponding models have to implement an interface and make usage of a trait.

Here's how we do it for a User and Company entity, where a user will be able to follow a company and the company will be able to be followed:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanFollow;
use Hypefactors\Laravel\Follow\Contracts\CanFollowContract;

class User extends Model implements CanFollowContract
{
    use CanFollow;
}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanBeFollowed;
use Hypefactors\Laravel\Follow\Contracts\CanBeFollowedContract;

class Company extends Model implements CanBeFollowedContract
{
    use CanBeFollowed;
}

Note: If required, an entity can follow and can also be followed, just implement both interfaces and traits on the same model to achieve that requirement.

Following an Entity

You can follow an entity like this:

$company = Company::find(1);

$user = User::find(1);
$user->follow($company);

You can also perform the same through the entity that's going to be followed:

$user = User::find(1);

$company = Company::find(1);
$company->addFollower($user);

Follow Many Entities

You can follow many entities like this:

$companies = Company::whereIn('id', [1, 3, 10])->get();

$user = User::find(1);
$user->followMany($companies);

You can also perform the same through the entity that's going to be followed:

$users = User::whereIn('id', [1, 3, 10])->get();

$company = Company::find(1);
$company->addManyFollowers($users);

Unfollowing an Entity

You can unfollow an entity like this:

$company = Company::find(1);

$user = User::find(1);
$user->unfollow($company);

You can also perform the same through the entity that's going to be unfollowed:

$user = User::find(1);

$company = Company::find(1);
$company->removeFollower($user);

Unfollow Many Entities

You can unfollow many entities like this:

$companies = Company::whereIn('id', [1, 3, 10])->get();

$user = User::find(1);
$user->unfollowMany($companies);

You can also perform the same through the entity that's going to be unfollowed:

$users = User::whereIn('id', [1, 3, 10])->get();

$company = Company::find(1);
$company->removeManyFollowers($users);

Determining if an Entity is Following another Entity

You can unfollow an entity like this:

$company = Company::find(1);

$user = User::find(1);
$user->isFollowing($company);

You can also perform the same through the entity that's going to be followed:

$user = User::find(1);

$company = Company::find(1);
$company->hasFollower($user);

Determine if an Entity has Followings

$user = User::find(1);

if ($user->hasFollowings()) {
    echo "User is following {$user->followings->count()} entities.";
}

Determine if an Entity has Followers

$company = Company::find(1);

if ($company->hasFollowers()) {
    echo "Company has {$company->followers->count()} followers.";
}

Get list of Followings

To get a list of followings (entities another entity is following)

$user = User::find(1);

$followings = $user->followings

Get List of Followers

To get a list of followers (entities that are following an entity)

$company = Company::find(1);

$followers = $company->followers

Get List of Followings by Entity Type

Get a list of followings (entities another entity is following) and filter by an entity type

$user = User::find(1);

$followings = $user->followings()->whereFollowableType(Company::class)->get();

Get List of Followers by Entity Type

Get a list of followers (entities that are following an entity) and filter by an entity type

$company = Company::find(1);

$followers = $company->followers()->whereFollowerType(User::class)->get();

Contributing

Thank you for your interest in Laravel Follow. Here are some of the many ways to contribute.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

License

Laravel Follow is licenced under the BSD 3-Clause License. Please see the license file for more information.

laravel-follow's People

Contributors

brunogaspar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

laravel-follow's Issues

Readme mistake

Hi,
I think there's a mistake in Preparing the Eloquent Models section of readme.
Instead of

use Hypefactors\Laravel\Follow\CanFollow;

It should be

use Hypefactors\Laravel\Follow\Traits\CanFollow;

And the same for CanBeFollowed Trait. Otherwise Trait not found exception is returned.

Are There Relationships?

I'm getting a list of the logged in user's followers, and it's only returning each follower's ID

auth()->user()->followings

So in order to get the follower's names, I need to do a separate query.

$ids = [];
foreach (auth()->user()->followings as $followed) {
    $ids[] = $followed->followable_id;
}

$this->following = User::whereIn('id', $ids)->get();

Is this the correct way? Or are there relationships defined and just not documented? Am I missing something?

The expected behavior to me would be like this

@foreach(auth()->user()->followings as $user)
    {{ $user->name }}
@endforeach

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.