Reuse or clone query()
Typically, we need to query multiple time from a filtered query. So, most of the time we use query() method,
let's write a query for getting today created active and inactive products
$query = Product::query();
$today = request()->q_date ?? today();
if($today){
$query->where('created_at', $today);
}
// lets get active and inactive products
$active_products = $query->where('status', 1)->get(); // this line modified the $query object variable
$inactive_products = $query->where('status', 0)->get(); // so here we will not find any inactive productsBut, after getting $active products the$querywill be modified. So, $inactive_products will not find any inactive products from $query and that will return blank collection every time. Cause, that will try to find inactive products from $active_products ($query will return active products only).
For solve this issue, we can query multiple time by reusing this $query object. So, We need to clone this $query before doing any $query modification action.
$active_products = (clone $query)->where('status', 1)->get();
// it will not modify the $query
$inactive_products = (clone $query)->where('status', 0)->get();
// so we will get inactive products from $query
No comments:
Post a Comment