Laravel Markable is a package to Integrate likes, bookmarks, favorites, reactions, and custom-made marks into your application.
The basic usage is adding a Markable
trait and types of “marks” you want to allow for a given model. For example, if you have a Course
model and you want to let users like the course:
1namespace App\Models;
2
3use Illuminate\Database\Eloquent\Model;
4use Maize\Markable\Markable;
5use Maize\Markable\Models\Like;
6
7class Course extends Model
8{
9 use Markable;
10
11 protected $fillable = [
12 'title',
13 'description',
14 ];
15
16 protected static $marks = [
17 Like::class,
18 ];
19}
With that model in place, here’s what it looks like to manage marks using this package:
1use App\Models\Course;
2use Maize\Markable\Models\Like;
3
4// marks the course liked for the given user
5Like::add($course, $user);
6
7// unmarks the course liked for the given user
8Like::remove($course, $user);
9
10// toggles the course like for the given user
11Like::toggle($course, $user);
12
13// returns whether the given user likes a course or not
14Like::has($course, $user);
15
16// returns how many users like a course
17Like::count($course);
The Like
model is built-in to the package, but you can also build custom mark models, such as Pledge
that allows a user to pledge a donation to a cause.
The package includes various mark types out-of-the-box, including:
- Bookmark
- Favorite
- Like
- Reaction
On the other side of adding a Like for a user, you might what to list all likes for a given user so they can see what courses they’ve liked:
1// All course models with a like from the given user
2Course::whereHasLike(
3 auth()->user()
4)->get();
5
6// All post models with a 'heart' reaction from the given user
7Post::whereHasReaction(
8 auth()->user(),
9 'heart'
10)->get();
You can learn more about this package, get full installation instructions, and view the source code on GitHub.