Olá a todos,
To com uma ‘bucha’, que to quase careca de pensar.
Vamos aos fatos.
Tenho uma tabela ‘produto’, e ‘categoriaproduto’.
produto: codproduto, codprodutocategoria
categoriaproduto: codprodutocategoria, codpai
Como visto a tabela categoriaproduto, tem um auto-relacionamento.
Ai vem a questão:
Até o primeiro ‘produto p INNER JOIN categoriaproduto cp ON p.codprodutocategoria = cp.codprodutocategoria’.
Até ae tudo bem, o que complico e não traz a ‘query’ correta, e outro relacionamento de categoriaproduto para categoriaproduto novamente, mais pra que isso?
Por que eu preciso mostrar o produto, mais que a título da categoria seja ‘%adesivo%’, eu queria pegar pelo menos o segundo nível do relacionamento.
Fiz a seguinte relação no Model:
public function relations() {
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'produtocategoria' => array(self::MANY_MANY, 'Produtocategoria', 'produtocategoria(codprodutocategoria, codpai)',
'alias'=>'pc',
'together'=>true,
'joinType'=>'INNER JOIN'
),
);
}
Query:
SELECT `p`.`codproduto` AS `t0_c0`, `p`.`codprodutocategoria`
AS `t0_c1`, `p`.`codigo` AS `t0_c2`, `p`.`titulo` AS `t0_c3`,
`p`.`datacriacao` AS `t0_c4`, `p`.`dataatualizacao` AS `t0_c5`,
`p`.`liberar` AS `t0_c6`, `p`.`lancamento` AS `t0_c7`,
`pc`.`codprodutocategoria` AS `t1_c0`, `pc`.`codpai` AS `t1_c1`,
`pc`.`titulo` AS `t1_c2`, `pc`.`datacriacao` AS `t1_c3`,
`pc`.`dataatualizacao` AS `t1_c4` FROM `produto` `p` INNER JOIN
`produtocategoria` `produtocategoria_pc` ON
(`p`.`codproduto`=`produtocategoria_pc`.`codprodutocategoria`) INNER JOIN
`produtocategoria` `pc` ON
(`pc`.`codprodutocategoria`=`produtocategoria_pc`.`codpai`) WHERE
(p.liberar = '1' AND produtocategoria_pc.titulo NOT LIKE '%adesivo%') ORDER
BY codproduto DESC LIMIT 16
Observa que no último relacionamento está invertido (pc
.codprodutocategoria
=produtocategoria_pc
.codpai
), e onde está dando o erro, eu precisava que o ‘codpai = codprodutocategoria’
To penando aqui, mais sem sucesso, se alguem puder me ajudar.
Segue abaixo o estanciamento do produto:
$produtos = Produto::model()->findAll(array(
'alias' => 'p',
'condition' => "p.liberar = '1' AND produtocategoria_pc.titulo NOT LIKE '%adesivo%' AND pc.titulo NOT LIKE '%adesivo%'",
'order' => 'codproduto DESC',
'limit' => '16',
'with' => array('produtocategoria')
));
Tem 2 NOT LIKE, seria no máximo 2 nível que queria.