CActiveRecord e relacionamentos many_many

42 views
Skip to first unread message

Marco Telles

unread,
May 18, 2011, 9:22:44 PM5/18/11
to yii-framework-brasil
Apanhando muito do Yii, estou jogando  a toalha e pedindo um help aqui.
Antes já li, reli e reli o guia definitivo, o tutorial do blog, o site do Ullman o "manuel", wiki etc...
Os exemplos encontrados eu consegui entender/fazer, mas não consigo por em prática para meu caso, que também não é nada tão complexo, acredito...
Quem puder ajudar, segue o relato abaixo, esperando que não fique confuso (muito) :)

a) o problema:
Listar todas as empresas relacionadas a determinada categoria.

b) Modelei a classe Empresa e Categoria, com relacionamento NxN - uma empresa possui muitas categorias, uma categoria possui muitas empresas.
Ex.:
- Empresa Coca-Cola -> Categoria refrigerantes, Categoria gelado, Categoria doce...
- Categoria gelado -> Empresa Coca-Cola, Empresa Kibon...

c) Criei as tabelas MySQL InnoDB
- Empresa (PK id), nomeEmpresa (...)
- Categoria (PK id), nomeCategoria (...)
- EmpCat (FK eId, cId)

d) No model:
- Empresas->relations():
  return array(
   'categorias' => array(self::MANY_MANY, 'Categorias', 'EmpCategorias(eId, rId)'),
  );

- Categorias->relations():
  return array(
   'empresas' => array(self::MANY_MANY, 'Empresas', 'EmpCategorias(rId, eId)'),
  );

e) no Controller eu recebo uma id de uma categoria via url ($id) e preciso exibir todas as empresas dessa categoria.
Pensei algo assim:

        $tmps=Empresas::model()->with('categorias')->findAll();
$names=array();
foreach($tmps as $tmp)
$names[]=$tmp->empresaNome;
        return $names;

Sendo que no caso $names vai conter todas as empresas e aí que está minha dificuldade, como filtrar essa consulta para exibir apenas empresas com Categoria->id == $id ???

Abs

Davi Alexandre

unread,
May 18, 2011, 9:33:39 PM5/18/11
to yii-framew...@googlegroups.com
Se você criou o relacionamento em Relations, por que não usa-lo?

$categoria = Categoria::model()->findByPk($id);
foreach($categoria->empresas as $empresa) 
    echo $empresa->nomeEmpresa;

2011/5/18 Marco Telles <coy...@pierdeipanema.com.br>
--
YFB - Yii Framework Brasil
O grupo é o que fazemos dele. Portanto, participe nas discussões e convide outros programadores ao grupo. http://groups.google.com.br/group/yii-framework-brasil?hl=pt-BR
 
04/2011: Anexos de até 250kb foram autorizados pelos membros da lista. Use com moderação.
 
--
Para postar: yii-framew...@googlegroups.com
Para cancelar a sua inscrição: yii-framework-br...@googlegroups.com

Marco Telles

unread,
May 18, 2011, 10:09:09 PM5/18/11
to yii-framew...@googlegroups.com
Caraca!!!

É impressionante como o Yii torna as coisas tão simples. Falta é pegar intimidade com o bicho e isso que estou tentando fazer.
Davi, estou desde ontem tentando resolver isso que você resolveu em poucos minutos, muito obrigado mesmo!!!!
VALEUUUUU!
Reply all
Reply to author
Forward
0 new messages