vendredi 23 février 2018

Laravel where issue on secondary join

I have a blog and I'm wanting to display all categories with posts within a dynamic change date start and date end.

I have the following eloquent query:

$Categories = Category::with('Posts')
                ->whereHas('Posts', function ($query) {
                    $query->where('created_at', '>=', $StartDate);
                    $query->where('created_at', '<=', $EndDate);
                })
                ->get();

This will return only return categories with Posts between the two dates.

I've found online to add doesntHave.

$Categories = Category::with('Posts')
            ->doesntHave('Posts')
            ->orWhereHas('Posts', function ($query) {
                $query->where('created_at', '>=', $StartDate);
                $query->where('created_at', '<=', $EndDate);
            })
            ->get();

This returns Categories that have no posts or posts within the date range. However, if there is a category that has posts but none of them are within the date range, they won't appear at all.

How can I show all categories and join the posts within the date range? If there are no posts within the range it should return as null.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire