Bem, estava eu novamente quebrando a cabeça pra tentar resolver o seguinte problema:
Meu projeto possui os seguintes relacionamentos:
Eu precisava que quando fosse inserir um Membro, o usuário pudesse escolher a que Coordenadoria o Membro pertence, pois escolhendo a Coordenadoria pode-se saber a Diretoria a qual o mesmo pertence.
Eu vi duas soluções possíveis.
Enfim, escolhi pela segunda, e ralei um pouco. Porquê? No meu controller eu tinha que montar o array de opções da combo box que deveria ser da forma:
array(’optgroup’ =>array(’idCoordenadoria’ => nomeCoordenadoria’), etc), etc)
Esse array teria que entrar no Form Helper no método que cria minha combo box, para que o conteúdo aparecesse da forma desejada. Mas como criar esse array nesse formato?
Depois de ficar tentando inutilmente criar ele através de várias linhas de código montando arrays a partir de outros arrays, eu comecei a reparar e lembrar que se você está escrevendo muitas linhas de código pra fazer alguma coisa, então isso não é cake. Fui no Cook Book e procurei pelo método find para saber como usá-lo com esse fim. Esse método, para que não sabe é o principal método para pegar informações referentes a algum model.
Porém não sabia como montar meu find de forma adequada. Até que li bastante e cheguei a conclusão simples: tinha que usar o parâmetro list’ do método find, que serve principalmente para isso, montar listas, como a mostrada na combo box.
Substituí todas aquelas linhas de código por uma:
$coordinations = $this->Member->Coordination->find(’list’, array(’fields’=>array(’Coordination.id’, Coordination.nome’, Director.nome’), recursive’ =>1));
Notas importantes sobre esse pedaço de código: