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:

  1. Em primeiro lugar, está selecionando o ID é para todos os países com código 'US'.
  2. 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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top