Этого можно добиться, получив сообщение с опубликованными комментариями;
$post = Post::where('id', $id)->with('comments', function ($q) {
$q->where('published', true);
})->first();
Тогда, когда в представлении вы вызываете $ post-> comments, вы получите только опубликованный.
В качестве альтернативы, если вы действительно хотите, вы можете обновить модель, чтобы иметь отношение опубликованных комментариев, но это не рекомендуется.
public function publishedComments()
{
return $this->hasMany(Comment::class)->where('published', true);
}