This tutorial has been updated for Laravel 8 (I also fixed a few issues).
A working implementation of this tutorial is also available on GitHub, e...
For further actions, you may consider blocking this person and/or reporting abuse
Hey, thanks for the tutorial! However, I think there is a slight mistake in the
Likes.php
class.It should be
return $likeable->likes()->whereHas('user', function(Builder $query) {
return $query->whereId($this->id);
})->exists();
rather than
return $likeable->likes()->whereHas('user', function($query) {
return $query->whereId($this->id)->exists();
});
in Laravel 7.
Ty man, i have been stuck for weeks because of that, it wasnt working until you wrote to took out the ->exists();
same thing to delete, the result is:
$likeable->likes()->whereHas('user', function(Builder $query) {
$query->whereId($this->id);
})->delete();
Also, if someone implements this, dont forget to add this in Likes.php
use Illuminate\Database\Eloquent\Builder;
Yeah I removed the Builder typehint, it wasn't very helpful anyway.
For some reason I get an error message when I try to post my own comment
My mistake. I'll change it, thanks for pointing it out
Hello! There's also a problem in LikesRequest
this would give you an error due to getClass($value) is trying to get class of numeric id.
So it should probably be like
Thanks for pointing this out. I'm fixing the article as we speak to take your feedback into account. Stay tuned!
Should be fixed now. What do you think?
Thank you very much for the tutorial! I have some doubts regarding how to implement this on my blade, I am a beginner. could you give me a tip? what do I put on my like button?
assuming you've done everything in the tutorial right you should have a route "/like"
You can check it with
php artisan route:list --name like
The button should look like this:
I believe you can figure out how to make the unlike button by yourself with the resources provided in the tutorial ;-)
Could u show how unlike works because I'm just managing to like but not dislike... #alsoBeginner
I get this error when I try my dislike
SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect INTEGER value: 'like' (SQL: delete from
noteswhere
id= like
Sure, I think I'll update the article to add the views, stay tuned!
Aaaaand done. check it out!
ohh nice, couldn't have hoped for better. I'll leave a comment on how it went once I get to it again!
most welcome my friend. You can also check this out, it's a working implementation of the like system github.com/bdelespierre/laravel-li...
I managed to get as far as last time same error presists...
SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect INTEGER value: 'like' (SQL: delete from
noteswhere
id= like)
`however I think in 'app/Models/Concerns/Likes.php' the 'use App\Like' should be 'use App\Models\Like'. For the rest I got a flaw less exp. just don't know how to solve that issue there.
Hi,
Love the code. Straight forward and works like a charm.
Is there a way to eager load the likes data on index pages?
I tried adding "likes" to the with query but it doesn't seem to reduce the amount of queries being performed.
Thanks
I have just tried
Using the demo project and Laravel Debug bar.
From 8 queries (with the N+1) problem you mention, I now have only 4 👍
See before and after
Hint: be sure to place the
->with('...')
part BEFORE->get()
or->all()
.Actually, I was using the code in the index page and doing a @can ('like') and @can ('unlike') which was querying the DB twice per record. I changed the @can ('unlike') for @else and now the duplicate queries are gone.
Thanks
Yes, that's because the gates in AuthServiceProvider are using User::hasLike :
You may change it to use a cache, like this (actual working solution) :
It should minimize the number of queries. It's ugly but it works!
Result before with 15 queries (one per
@can('like')
) and after only 6!Can you show us what you tried?
Hello,
I have run into a weird issue.
Wen I run the code on the localhost where I do my development, everything works fine.
This is a Windows 10 machine running PHP 7.4.15
However, when I transfer my files to my Ubuntu 18.04 server, I get the following error message on all pages :
->> syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting '{' <<-
And it is pointing to
in my User model.
I am running PHP 7.4.21 on the server.
If I comment out the lines, the pages load properly.
Hopefully, this is enough info to TS, if not, please let me know what else is needed.
Thanks
In the code snippet you provided, there's a typo on the arrow function, it should be:
I followed the steps, running the localhost says "trait app\concerns\likeable" not found... Tried a lot to figure out the reason but failed. It may be a typo or the new version is the reason. Can you tell me...
It's very unlikely a version issue (if you're running PHP7.2+ of course).
If you see the 'not found' error it means a namespace import is missing.
Hello @bdelespierre
That's really brillant, thanks a lot for sharing!
I noticed an error in
app/Http/Controllers/LikeController.php
Change
public function unlike(UnlikeRequest $like)
with
public function unlike(UnlikeRequest $request)
;-)Thank you again,
i get proble on
Undefined property: stdClass::$likes
flareapp.io/share/q5YLj4j7#F62
Your
$model
variable shouldn't be anstdClass
instance. It should be aPost
instance. (or anything with theLikes
trait).I suggest you dump this variable with
dd($model)
in the controller before returning the view and try to understand what's going on.Good luck!
I've tried it, it's still an error in the
Undefined property: stdClass::$likes
and already using dd()
Thanks for this tutorial sir. Just curious is there a way to do this without having the user to sign in before liking a post? Thank you, sir
Well, you could tweak the design a bit by making the user_id nullable in order to create userless likes.
Hi, I am new to Laravel. I followed your orders here but when i am trying to run and see a view (blade) with the posts from db I am getting this error:
Trait 'App\Concerns\Likes' not found
What am I missing?
Thanks in advance.
i get proble on stdClass::$Likes
More details are here :
flareapp.io/share/q5YLj4j7#F62
using Post::all();
no DB::table('post')->get();
Nice work that will serve as a reference for the design of features on Laravel 8
Thank you 👍
How the user look what was his liked ? @bdelespierre
$something->likes
Thanks for the tutorial...