You would usually put this functionality in its own method so that you can call it from the scheduler - not as part of a user request.
Suppose you have a post due for removal tomorrow, but you get no visitors tomorrow. The post that should be expired is missed and never gets deleted because the date never matches
Also, why would you run this query on every user visit when it only needs to be run once per day?
Depending on the column type, you might currently need to match the time exactly also.
To resolve some of these, change your query slightly;
Post::where('Expiration_date','<',Carbon::now())->delete();
You don't need the return value and you can check if the date is less than the current date rather than equal to.