public function posts() { return $this->hasMany(\App\Post::class); }Now, you need to realize that this wouldn't work:
$topics = Topic::with('posts')->orderBy('posts.created_at')->get();What we actually need to do - two things, actually: 1. Describe a separate relationship for the latest post in the topic:
public function latestPost() { return $this->hasOne(\App\Post::class)->latest(); }2. And then, in our controller, we can do this "magic":
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
Let's test it out - here's our topics table. 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.
$users = User::with('latestPost')->get()->sortByDesc('latestPost.created_at'); foreach ($users as $user) { echo $user->id . ' - ' . $user->latestPost->title . ' (' . $user->latestPost->created_at . ')Result: So, isn't that sweet? You can read more about sortBy and sortByDesc methods here.
'; }
No comments or questions yet...