I experienced something similar a while ago and logged this - https://trac.cakephp.org/ticket/6268 Nate's reply was (quite correctly) that I should write a test case to prove/disprove. 4 months later & I still haven't done it :( My lazy solution: refactor my code until it went away! (No excuse really, but I was busy... and I can't even remember now what changes I made) @MonkeyGirl: got time to write a tc? Your relationship context looks a bit simpler than the one I had...
On Aug 18, 10:31 pm, MonkeyGirl <z...@monkeehouse.com> wrote: > I believe this may be the same issue I'm experiencing. After a bit of > investigation, I've found out the issue is that specifying "contain" > would appear to affect things in subsequent queries. > > For example, say I have Cart hasMany CartedProduct belongsTo Product > belongsTo Brand. Product also belongsTo VatRate. (In other words, > CartedProduct is a linking table between Cart and Product. It has a > quantity column, hence I'm not using hABTM.) I might have a piece of > code like this, in a method of the Cart model: > > // This is fine. It displays products along with their brand. > $products = $this->CartedProduct->Product->find('all', array( > 'contain' => array( > 'Brand' > ) > )); > > pr($products); > > // This causes issues > $ignore = $this->find('first', array( > 'conditions' => array( > 'Cart.id' => $cartID > ), > 'contain' => array( > 'CartedProduct.Product.VatRate' => array( > 'fields' => array( > 'percentage' > ) > ) > ) > )); > > // This is now broken. The brand is no longer displayed. > $products = $this->CartedProduct->Product->find('all', array( > 'contain' => array( > 'Brand' > ) > )); > > pr($products); > > There are a few interesting things to note here: > > Product is now broken, even though the query that broke it was > performed on Cart. > > If I contain 'CartedProduct.Product.VatRate' then it's fine, but as > soon as I get as far as specifying its field, in this case > "percentage", it breaks. This is regardless of whether I specify > 'CartedProduct.Product.VatRate.percentage' or use the proper array- > based method above. > > By "breaking", I specifically mean that any subsequent queries > regarding products will only show data that meet the contain criteria > above as well as any new contain criteria. > > I would expect this from unbindModel() if I was telling it to remember > the unbinding, but I wouldn't expect it from a contain argument passed > to find(). > > I've checked, and yes, Product does still belongTo both Brand and > VatRate after the query. A pr() of $this->CartedProduct->Product and > of $this (the Cart) show that both are identical before and after the > troublesome query. > > Before anyone asks, I'm using CakePHP version 8166. > > I've implemented a temporary workaround: because I know I want Brand > in a subsequent query, I'm including it in the contain in the query > that breaks the subsequent ones. However, that's not a viable long- > term solution as I'm concerned that I may have some other piece of > code somewhere that thinks it's pulling out important data that it now > isn't. > > Is this a bug? should I go ahead and report it? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---