Selecione a partir de uma tabela onde associados fieldname table = 'x' em Cake PHP
-
06-07-2019 - |
Pergunta
Em CakePHP, tenho duas tabelas, Países & Redes. Eles têm uma relação HABTM e são unidos por countries_networks.
Eu estou tentando obter todos os países da tabela de países onde o campo 'nome' no Networks = 'o2'
Eu percebi que não pode fazer isso usando um achado básico (), então eu tenho experimentado com o comportamento containable. Eu consegui para restringir os dados retornados, mas parece que 'containable' não é exatamente trabalhar como eu quero. Heres meu código:
$countries = $this->Country->find('all', array('contain' => array(
'Network' => array(
'conditions' => array('Network.name =' => "o2"),
)
)));
Esta consulta no entanto retorna todos os países, eo Network.name se o seu 'O2'. O que eu realmente precisa fazer é retornar apenas os países que têm um Network.name de 'o2', e não outros.
alguém pode ajudar? Obrigado.
Solução
A sua consulta retorna exatamente o que o seu perguntar. Tente selecionar a partir da rede.
$countries = $this->Country->Network->find('first', array(
'conditions' => array('Network.name' => "o2"),
'contain' => array('Country')
));
$countries = $countries['Country'];
Outras dicas
"='=>" O que é isso? não há é necessário para uso símbolo "=" depois de "Network.name"
Você deve ser capaz de fazer algo parecido com isto:
$this->Country->hasAndBelongsToMany['Network']['conditions'] = array('Network.name'=>'o2');
$myCountries = $this->Country->find('all');
Eu não testei isso, mas deverá fazê-lo muito perto de onde você precisa ser.
Além disso, tenha em mente que a mudança da matriz hasAndBelongsToMany como isso vai afetar todas as consultas subsequentes contra esse modelo durante o carregamento da página atual (mas será redefinida na próxima vez que o modelo é instanciado).
Eu estou no meu caminho para fora da porta, tão triste para o breve explicação.
Eu acho que o que você quer é uma relação HABTM, mas para ser capaz de filtro com base em dados do modelo associado. Para fazer isso, veja o comportamento "Containable" no bolo do manual. Certeza que é o que você está depois.