Anytime you are working with $products, you are building upon the query until you use ->get() (or first(), findOrFail(), etc), to execute the query, even if you saved it to $a. $a is now a copy of the $products query builder, but it's still the $products query builder.
Thank you for clarification.
Any tips/ideas how to workaround this? - to create one (complex) query and then modify it in the end slightly to fetch different results?
You can't modify it if you already added it to the query builder object. It's best to do that logic first, and then use whatever you determine to build the query.
The thing is that I have a very complex query that selects my products. Then based on this complex query i need to do other things with the results (further reduce it based on other conditions, etc...)
So I need the original results from query and also the reduced one
Well, I need to change the concept of my code then... thank you
// Hit database once
$products = Product::whereIn('id', [15,1111])->get();
// $products is now a collection so you can filter, map ...
$product15 = $products->where('id', 15);
$product15 = $products->where('id', 1111]);