Hiren was close, but you need to go from the category since your post
is owned by the category
$category->posts()->latest()->first();
Alternatively you could work backwards:
$post = Post::latest()->whereHas('category', function($q) use($category_id) {
return $q->where('id', $category_id);
})->first();
For this to work you'll need to define your model relationships:
Category Model needs this function:
public function posts()
{
return $this->hasMany(AppPost::class);
}
Post Model needs this function:
public function category()
{
return $this->belongsTo(AppCategory::class);
}
To respond to Alexey Mezenin, we can just pass a callback to with()
to define which posts we want to pull in for each category, performing the correct eager load
.
Category::with(['posts' => function($q) {
return $q->latest()->first();
})->get();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…