Ho tre modelli, Utenti, Commenti e Pagine.Come posso ridurre al minimo le query 'contain' in CakePHP?
Utentiha moltiCommenti e CommentiappartengonoPagine.
Tutti i modelli utilizzano il comportamento containable
e il valore predefinito è recursive -1
.
Se io chiamo una query find()
su Commenti, con il contiene richiesta, tra cui il campo Pagina modello, questo restituisce correttamente i risultati utilizzando una singola query, automagicamente adesione Pagina tavolo per l'utente.
Se io chiamo una query simile al modello utente (contenentecommento e Comment.Page), il risultato è una query di procurarsi i Commenti, seguita da una query per ogni commento a fonte la corrispondente Pagina.
C'è un modo per configurare i modelli per mantenere l'ottimizzazione JOIN? Ho assunto che la dichiarazione belongsTo sul modello correlato (Comments) seguisse il modello host (Users).
UPDATE
vorrei chiarire, la mia domanda utilizzato una versione semplificata del mio studio vero e proprio caso. Anche se la soluzione minima ho bisogno includerebbe questo iniziale ModellohasManyModellobelongsToModello struttura, sto anche cercando la soluzione ad uno o più ulteriori belongsTomodelle lungo la catena (che , Però, avrei usato automaticamente LEFT JOINs, perché sarebbe fattibile).
Hi Colby. Ne hai un esempio in pratica? Credo che questo approccio possa essere d'aiuto con uno dei miei progetti e con i poster originali. –
Credo che qualcosa del genere nel controller contenga le query per l'intero controller. 'function beforeFilter() \t { \t \t parent :: beforeFilter(); \t \t $ this-> Model-> contain ('RelatedModelStuff'); \t \t \t} // beforeFilter' –
Grazie a Colby, questo non è esattamente quello che cercavo, ma la dichiarazione del filtro beforeFilter è uno snippet utile, applausi. – Rhys