Eloquent Relations: how to order topics by newest posts?

Quite a typical scenario, but not easy to find the answer. You can easily order Eloquent results by some column, but what if you want to order by related column in child table? Most common example is a forum like Laracasts which shows topics in order by the latest post in that topic. How to do that?

First, this is our relationship in app\Topic.php:

Now, you need to realize that this wouldn’t work:

What we actually need to do – two things, actually:

1. Describe a separate relationship for the latest post in the topic:

2. And then, in our controller, we can do this “magic”:

Let’s test it out – here’s our topics table.

laravel topics

Now, let’s show all users order by latest post.
If you look at the data, user ID 2 should come first with latest post on 27th day, then user ID 3 with post on 26th day, and then user ID 1 with post on 25th.


laravel users

So, isn’t that sweet? You can read more about sortBy and sortByDesc methods here.

Liked the article? Maybe you need help with your Laravel project?
Check out my Upwork profile and hire me!

3 thoughts on “Eloquent Relations: how to order topics by newest posts?

  1. So weird, I was looking to solve this exact problem (in my case, it’s tags not topics, but I’m effectively using them as topics) and this post shows up in my RSS reader… Thumbs up and many thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *