Dúvida com relacionamento no Cake

107 views
Skip to first unread message

Gustavo Marcon

unread,
Oct 17, 2012, 4:59:03 PM10/17/12
to cake-...@googlegroups.com
Boa tarde pessoal, sou iniciante em Cake e por isso peço ajuda aos mais experientes, para tentar solucionar algo que aparentemente é simples.

Tenho 3 models: Cidade, Bairro e Endereço.

No caso, Endereço é para que um Cliente possa ter N endereços, então na tabela de endereços tenho id_cliente e id_bairro, entre outros que não vem ao caso.
Na tabela Bairro, tenho a chave id_cidade.

Pois bem, meus models estão da seguinte maneira:

<?php
class Cidade extends AppModel {
var $name = "Cidade";
var $primaryKey = "id_cidade";
var $useTable = "tb_cidades";
    var $displayField = "cidade";

    var $hasMany = array(
        'Bairro' => array(
                 'className'    => 'Bairro',
                 'foreignKey'    => 'id_cidade'
                 )
    );
}
?>

<?php
class Bairro extends AppModel {
var $name = "Bairro";
var $primaryKey = "id_bairro";
var $useTable = "tb_bairros";
    var $displayField = "bairro";

    var $belongsTo = array(
        'Cidade' => array(
            'className'    => 'Cidade',
            'foreignKey'    => 'id_cidade'
        )
    );

    var $hasMany = array(
        'Endereco' => array(
            'className'    => 'Endereco',
            'foreignKey'    => 'id_bairro'
        )
    );
}
?>


O problema: Quando faço um find, gostaria que eu pudesse recuperar o nome da Cidade, do Bairro e o restante dos dados do endereço, porém, a query gerada não inclui a tabela de Cidades, por este motivo não consigo o nome da cidade, apenas o restante das informações.

Alguém poderia me ajudar enxergar onde estou errando ?



Obrigado desde já !

Gustavo Marcon

unread,
Oct 18, 2012, 7:42:46 AM10/18/12
to cake-...@googlegroups.com
Poxa, será que esta lista não é mais utilizada ou será que o que postei não é tão simples como eu imaginava.

Rodrigo Urbinati Maia

unread,
Oct 18, 2012, 9:06:11 AM10/18/12
to cake-...@googlegroups.com
Essa lista está parada faz tempo. Mas vc não colocou o código do Model Endereco

Rodrigo Maia
http://www.dicashop.com.br/
rod...@gmail.com



--
Você está recebendo esta mensagem porque se inscreveu no grupo "Cake PHP Português" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/cake-php-pt/-/cxsd7cLiu6wJ.

Para postar neste grupo, envie um e-mail para cake-...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para cake-php-pt...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/cake-php-pt?hl=pt-BR.

Gustavo Marcon

unread,
Oct 18, 2012, 9:35:46 AM10/18/12
to cake-...@googlegroups.com
Pessoal, estou fazendo testes com o Containable, mas não estou entendendo. Ele adiciona ou retira relacionamentos ?

Pois quando ativo, ele deixa de trazer os relacionamentos existentes com o Model principal, quando na verdade o que eu gostaria era de adicionar relações existentes nos models seguintes.



Obrigado,

Gustavo


Em quarta-feira, 17 de outubro de 2012 16h59min03s UTC-4, Gustavo Marcon escreveu:

Anderson Unsonst

unread,
Oct 18, 2012, 9:48:21 AM10/18/12
to cake-...@googlegroups.com
essa lista está muito tempo parada e pelo visto o cake de uma forma
geral tbm está rs, da uma olha nesse link para ver se te ajuda:
http://cakephp.1045679.n5.nabble.com/does-cake-not-join-tables-when-using-hasMany-td1260167.html

Gustavo Marcon

unread,
Oct 18, 2012, 10:23:39 AM10/18/12
to cake-...@googlegroups.com
Caramba, que coisa complicada. Será que vale a pena utilizar o Cake no desenvolvimento ?

Desculpem, mas estou apanhando feio. Não consegui entender o Containable, se alguém puder me auxiliar nessa questão agradeço.


Gustavo

Em quarta-feira, 17 de outubro de 2012 16h59min03s UTC-4, Gustavo Marcon escreveu:

Anderson Unsonst

unread,
Oct 18, 2012, 11:21:41 AM10/18/12
to cake-...@googlegroups.com
usei cake uma vez só, entrei nessa lista justamente para aprender mais sobre esse framework, me parece que a lista internacional do cake ainda é bem ativa tenta la: http://groups.google.com/group/cake-php

Atualmente eu uso outro fw, resolveria o problema com um simples $this->db->join, mas eu acredito que deve ter um jeito simples de resolver isso, usando o cake, posta do paste.bin o codigo do seu model

aproveita e me diz qual versão do cake você está usando, vamos tentar resolver isso:

http://2.bp.blogspot.com/-kyLozhNVIOU/UCGt6QtccoI/AAAAAAAACww/R3xpHMcKR9o/s1600/desafio-aceito1.jpg

Gustavo Marcon

unread,
Oct 18, 2012, 11:32:07 AM10/18/12
to cake-...@googlegroups.com
Obrigado amigo. O que você quis dizer com paste.bin ? Desculpe, mas sou novato mesmo... rsrs


Gustavo

Anderson Unsonst

unread,
Oct 19, 2012, 10:42:20 AM10/19/12
to cake-...@googlegroups.com
iae já desistiu ?

Jansen Nunes

unread,
Oct 19, 2012, 12:19:35 PM10/19/12
to cake-...@googlegroups.com

gustavo

ja tentou o find all???

suas convenções estão corretas nas tabelas???

http://book.cakephp.org/1.3/pt/view/1021/find-all

Em 19 de outubro de 2012 11:42, Anderson Unsonst <anderso...@gmail.com> escreveu:
iae já desistiu ?

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Cake PHP Português" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para cake-...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para cake-php-pt...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/cake-php-pt?hl=pt-BR.



--
Jansen

Gustavo Marcon

unread,
Oct 19, 2012, 7:18:45 PM10/19/12
to cake-...@googlegroups.com
Não desisti não. Consegui dar uma evoluida já, mas hoje não tive muito
tempo para trabalhar em cima disto.

Vou postar ainda hoje ou amanhã o que jã consegui.

Obrigado a todos por enquanto.


Gustavo

Em 19 de outubro de 2012 10:42, Anderson Unsonst

Gustavo Marcon

unread,
Oct 21, 2012, 8:16:40 PM10/21/12
to cake-...@googlegroups.com
Pessoal, agradeço a todos que me ajudaram.

Usando o Containable consegui fazer o que pretendia.

Para isso adicionei no AppModel a linha var $actsAs = array("Containable");

O chato disso é em cada consulta ter que informar quais tabelas vinculadas pretendo trazer, pois antes isso era automatico.

Mas olhando pro lado de performance, acho que isso pode ser um benefício.

Agora estou encontrando uma outra dificuldade.

Tenho um relacionamento has and belongs to many e preciso fazer um find com uma condition, porém só recebo uma mensagem informando que o campo que eu estou usando na condition não existe. Isto acontece pois na query gerada pelo cake, ele não está fazendo Join com as tabelas do relacionamento HABTM, ai logicamente o campo não existe mesmo.

Procurei na internet, fiz alguns testes, mas até agora sem sucesso.

Agradeço muito quem puder ajudar. Não sei se consegui ser claro na questão.


Obrigado,

Gustavo

Em quarta-feira, 17 de outubro de 2012 16h59min03s UTC-4, Gustavo Marcon escreveu:

Gustavo Marcon

unread,
Oct 22, 2012, 10:42:11 AM10/22/12
to cake-...@googlegroups.com
Bom dia,

Não consegui fazer o find() com $hasAndBelongsToMany funcionar da
maneira que eu queria, mas consegui adicionando manualmente o join,
ficando da seguinte forma:

$this->set("planos",
$this->Contrato->Endereco->Bairro->Plano->find("list", array(

"joins" => array

(

array

(

"table" => "tb_planos_bairros",

"alias" => "PlanosBairros",

"type" => "INNER",

"conditions" => "Plano.id_plano =
PlanosBairros.id_plano"

)

),

"conditions" =>
array("PlanosBairros.id_bairro"=>$idEndereco,"Plano.disponivel"=>"S")

Saberiam me informar se realmente esta é a única maneira ou apartir do
momento que tenho um $hasAndBelongsToMany declarado, a consulta
deveria funcionar automaticamente?


Obrigado,

Gustavo
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Cake PHP
> Português" dos Grupos do Google.
> Para ver esta discussão na web, acesse
> https://groups.google.com/d/msg/cake-php-pt/-/mJjN4Ll7_l4J.
Reply all
Reply to author
Forward
0 new messages