Ordenar ("Order By" ) através de um campo em outra tabela

6 views
Skip to first unread message

ebiagi

unread,
Jan 26, 2020, 4:19:02 PM1/26/20
to CakePHP Tuga
Amigos,
estou precisando tirar uma dúvida com vocês!

Tenho duas tabelas: produtos e categorias. 

-------------
Produtos
-------------
cod
nome
desc_produto
img_produto
preco
categoria_id

-------------
Categoria
-------------
id
nome

Fiz um sidebar gerar uma lista das categorias cadastradas no banco com um link contendo todos os produtos relacionados na categoria. E agora o que acontece, estou tentando ordenar pelo preço do produto.

Fiz um método no controller da seguinda forma:

$this->viewBuilder()->setLayout('buscar_categoria');
        $categoria = $this->Categorias->get($id, [
            'contain' => ['Produtos'],
            'order'   => ['Produtos.preco' => 'ASC']
        ]);

$this->set('categoria', $categoria);

Só que dessa forma dá erro: Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Produtos.preco' in 'order clause'.

Como eu faço pra acessar esse campo no meu controller de categorias?


----------------------
Model Categoria
----------------------
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('categorias');
        $this->setDisplayField('nome');
        $this->setPrimaryKey('id');

        $this->hasMany('Produtos', [
            'foreignKey' => 'categoria_id',
        ]);
    }

---------------------
Model Produtos
----------------------
parent::initialize($config);

        $this->setTable('produtos');
        $this->setDisplayField('id');
        $this->setPrimaryKey('id');

        $this->belongsTo('Usuarios', [
            'foreignKey' => 'usuario_id',
            'joinType' => 'INNER',
        ]);
        $this->belongsTo('Categorias', [
            'foreignKey' => 'categoria_id',
            'joinType' => 'INNER',
        ]);



Agradeço desde já a colaboração!

Rafael Queiroz

unread,
Jan 27, 2020, 7:13:37 AM1/27/20
to cakep...@googlegroups.com
Olá

Na verdade você tá buscando 1 categoria e não uma lista. $this->Categoria->get($id)
Se você quiser ordenar os produtos assoaciados a essa categoria, fica assim:

$this->Categorias->get($id, [
  'contain' => [
    'Produtos' => [
      'sort' => ["Produtos.preco ASC"]
    ]
  ]
]);

--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.
Para ver este debate na Web, visite https://groups.google.com/d/msgid/cakephp-pt/909b4acb-77e2-4502-8054-d55621bf19f3%40googlegroups.com.


--
Best Regards,

Rafael F. Queiroz

ebiagi

unread,
Jan 27, 2020, 12:38:50 PM1/27/20
to CakePHP Tuga
Perfeitamente, amigo. 
Obrigado pela força! Deu certo.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakep...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages