riza With kullanmadığınızda, ilişkiyi ilk çağırdığınızda bir kere sorgu atar ama sonrasında çekilen kaydı kullandığı için tekrar sorgu atmaz. Yani $order->products yaptığınızda products ilişkisi with ile yüklenmemiş ise bir sorgu atar, sonra tekrar $order->products şeklinde çağırırsanız tekrar sorgu atmaz çünkü kayıtlar artık products elemanına yüklenmiştir. O yüzden tek bir kayıt ile with kullandığınızda pek bir anlam ifade etmiyor. Elbette with ile yüklenen ilişki arka planda birden fazla sorgu yapabilir, ilişkiyi kuran yöntem içinde ne yaptığınıza bağlı.
Projeye, veriye... göre tamamen değişen bir konu olduğu için net bir şey söylemek mümkün değil ama eğer yapabiliyorsanız işlemleri sorgu içerisinde halletmeye çalışın. Gerekirse Builder'ın da gerisine gidip DB kullanın. Collection değil de dizi elde ederseniz onu Collection'a çevirin ve map/transform uygulayarak istediğiniz çıktıya dönüştürün. Belki kod karmaşası azalabilir.