We have the same problems at Cohuman as well. The properties are eagerly loaded, but accessing our associations leads to n+1 queries.
On Oct 7, 10:42 pm, Gernot <[email protected]> wrote: > I would be very interested in a solution, too. We have similarly > complex compositions in our domain model. > > Gernot > > On 5 Okt., 15:25, George <[email protected]> wrote: > > > > > FWIW In a recent project managed to circumvent this problem by > > querying and pre-fetching all child items before starting the outer > > loop(s). (I hope there's a simpler way!) > > > As I recall it would mean your code would look something like this: > > (untested) > > > # Coax DM into preloading collections: > > customers = Customer.all(:limit => 3) > > customers.orders.reload > > customers.orders.order_lines.reload > > > #For items you may need to prepare something like: > > item_ids = customers.orders.lines.map{|l| l.item_id } > > items = Item.all( :id => item_ids ) > > > # Then try your original loops with a slight tweak for item.sku: > > customers.each do |c| > > c.orders.each do |o| > > o.order_lines.each do |ol| > > a = "#{c.name}: #{o.reference} #{ol.quantity} x > > #{ items.first(:id => ol.item_id).sku }" > > end > > end > > end > > > Food for thought anyway. Hopefully a more DM-savvy reader can improve > > on this. > > George > > > On Sep 30, 8:24 am, Marcel Hild <[email protected]> wrote: > > > > Hi, > > > I recreated the model found > > > athttp://datamapper.org/docs/find#nested_conditions > > > When I want to print out all Customers with all Orders, including > > > OrderLines and everything, > > > Datamapper eager loads the first association (Customer.orders) but for > > > the rest > > > it will issue n queries. > > > > I created a gist which shows it athttp://gist.github.com/604156 > > > > Is there a way to have more control of what is loaded or should I fire > > > the query differently? > > > > thanks for any input > > > > marcel -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/datamapper?hl=en.
