Not sure why linkable is not working for you. Did you make sure to set 
'type' => 'INNER' in the linkable definition for that model? That will 
filter records from the parent model according to the conditions in the 
association.

On Tuesday, July 22, 2014 10:57:14 AM UTC+2, David Yell wrote:
>
> *Synopsis*
> Trying to select data from multiple related models explicitly is hard in 
> the framework due to it's focus on always providing a left join. Even with 
> Containable and Linkable it's not always possible, without a manual query, 
> to select records where their related record has a condition. Such as 
> selecting all Posts where a Tag is authored by User x. It seems odd to me 
> that the framework should return empty related model records or, if using 
> linkable not return all the related records. I am starting this thread to 
> discuss solutions, tips, tricks and techniques for achieving this 
> functionality as I do not feel that either Containable or Linkable 
> accurately cover this use-case. It may well be that case that some more 
> guidance is needed in the documentation for this specific type of query.
>
> *The problem*
> You would like to select from primary model but only if related models 
> conditions are met. The primary model should only be included in the result 
> set if the related model conditions are met. With a single related model 
> this is quite easy using Linkable. However when you start trying to achieve 
> this across HABTM, hasManyThrough or two or three nested models the problem 
> grows in complexity.
>
> A few examples, might make things clearer.
>
> *Hotel hasMany HotelFeature belongsTo Feature*
> You need to select hotels which have n number of specific features. The 
> hotel must have all of the features listed to be included in the dataset.
>
> *Post hasMany PostsTag belongsTo Tag belongsTo User*
> You need to find all the posts which have tags created by a certain user.
>
> *Hotel belongsTo City belongsTo Province belongsTo Country*
> You need to select all the cities in a country where there is a hotel.
>
> I'm sure there are some other use-cases, but these are the ones of the top 
> of my head. As you can see it's usually selecting a primary record where a 
> related record matches a certain condition, but where the related record is 
> a multiple.
>
> *Possible solutions*
> This is where I am unsure. My SQL-fu is weak thanks to Cake's awesome ORM. 
> The only real thing that I can think of is either more enhancements to 
> Containable or Linkable really. However I am not sure how to approach such 
> a problem. I was told once in an interview that any more than five joins 
> will impact performance in MySQL (could be fiction), so obviously there is 
> a performance concern with highly normalised databases. Concerns which are 
> ignored by Containable with it's multiple queries across many models - a 
> solution which I think was devised to solve this problem.
>
> *Discussion*
> The idea of the thread was to discuss potential solutions really. I wanted 
> to air my thoughts on a problem which I have hit many times with my current 
> project and have had to battle against. Usually using manual joins, but in 
> most cases I end up using Containable and filtering the data in the 
> front-end `foreach()` which isn't elegant, clever or clean.
>
> I'm sure this kind of issue will have been addressed with the new ORM in 
> 3.x, but I need to find a decent solution to this problem which will be 
> flexible enough to be beneficial to lots of different projects, and to 
> other Cake users. We are all taught to normalise, and it makes sense to do 
> so, but this issue keeps nagging at me and I'm finding it frustrating. I 
> don't feel that the framework is helping me solve such a problem.
>
> If you read to here, thanks, have a biscuit and share your thoughts. How 
> do you get around this issue?
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

Reply via email to