Construindo instrução condicional em vários modelos (CakePHP 1.2.5)
Pergunta
Vamos dizer que eu tenho 3 modelos:. Utilizador, País
User belongsTo Region
Region belongsTo Country
Cada um destes modelos está usando o comportamento Containable. Eu estou tentando encontrar usuários do país com o código 'US'. Aqui está o que estou tentando:
$users = $this->User->find('all', array(
'conditions' => array('Country.code' => 'US'),
'contain' => array('Region.Country'),
));
CakePHP é separar isso em 2 consultas:
- Em primeiro lugar, está selecionando o ID é para todos os países com código 'US'.
- Em seguida, ele está usando aqueles de ID para selecionar todos os usuários regiões juntando onde
region.country_id
está nessa lista de país ID está obtidas anteriormente.
Como resultado, eu acabar com erros de SQL em meu aplicativo desde minha matriz conditions
contém uma referência a Country.code, ea segunda consulta que bolo constrói não Cadastre países.
A melhor solução bolo vejo é construir uma sub-consulta, conforme descrito na Complexo encontrar as condições parte do manual. No entanto, isso parece muito complicado, e é mais de um hack que eu gostaria de implementar. Existe uma maneira mais fácil que eu estou com vista?
Solução
Nate Abele (ex-chumbo dev do CakePHP) escreveu um artigo sobre fazer ad hoc se junta que pode ajudar.
Outras dicas
Coloque as condições na contêm também. Por exemplo:
$users = $this->User->find('all', array('contain' => array(
'Region' => array(
'Country' => array(
'conditions' => array('Country.code' => 'US'),
),
),
)));
Veja o segundo ao último exemplo na o Containable Manual