0

Having problems with this script:

$select = $tabela->select()
                     ->joinInner('pedidos_itens', 'pedidos.peIp = pedidos_itens.ipPedido', array('ipProduto', 'ipQtde', 'ipCor', 'ipTextura', 'ipTamanho', 'ipSeq'))
                     ->joinInner('representantes_m', 'pedidos.peRepresentante = representantes_m.rpId', array('rpNome', 'rpTelefone', 'rpCidade', 'rpEstado', 'rpEmail'))
                     ->joinInner('produtos_m', 'pedidos_itens.ipPedido = produtos_m.prId', array('prTitulo', 'prRef', 'prCategoria', 'prColecao'))
                     ->joinInner('produtos_cores_m', 'pedidos_itens.ipProduto = produtos_cores_m.pcProduto', array('pcTitulo'))
                     ->joinInner('texturas_m', 'pedidos_itens.ipProduto = texturas_m.teProduto', array('teTitulo'))
                     ->joinInner('colecoes_m', 'produtos_m.prColecao = colecoes_m.coId', array('coTitulo'))
                     ->joinInner('categorias_m', 'produtos_m.prCategoria = categorias_m.caId', array('caTitulo'))
                     ->where('pedidos.peId = 2')
                     ->order('pedidos.peId DESC');

That returns this error:

Warning: Select query cannot join with another table in C:\Arquivos de programas\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Select.php on line 1345

------- EDIT

I've changed that to this:

$db = Zend_Db_Table::getDefaultAdapter();

    $select = $db->select()
                     ->from('pedidos', array('peId', 'peRepresentante', 'peData', 'peStatus'))
                     ->joinInner('pedidos_itens', 'pedidos.peId = pedidos_itens.ipPedido', array('ipProduto', 'ipQtde', 'ipCor', 'ipTextura', 'ipTamanho', 'ipSeq'))
                     ->joinInner('representantes_m', 'pedidos.peRepresentante = representantes_m.rpId', array('rpNome', 'rpTelefone', 'rpCidade', 'rpEstado', 'rpEmail'))
                     ->joinInner('produtos_m', 'pedidos_itens.ipPedido = produtos_m.prId', array('prTitulo', 'prRef', 'prCategoria', 'prColecao'))
                     ->joinInner('produtos_cores_m', 'pedidos_itens.ipProduto = produtos_cores_m.pcProduto', array('pcTitulo'))
                     ->joinInner('texturas_m', 'pedidos_itens.ipProduto = texturas_m.teProduto', array('teTitulo'))
                     ->joinInner('colecoes_m', 'produtos_m.prColecao = colecoes_m.coId', array('coTitulo'))
                     ->joinInner('categorias_m', 'produtos_m.prCategoria = categorias_m.caId', array('caTitulo'))
                     ->where('pedidos.peId = 2')
                     ->order('pedidos.peId DESC');

    $resultado = $db->query($select)->fetchAll();

It returns an empty array, even having records. So? :/

---- EDIT 2

This is the query:

SELECT pedidos.peId, pedidos.peRepresentante, pedidos.peData, pedidos.peStatus, pedidos_itens.ipProduto, pedidos_itens.ipQtde, pedidos_itens.ipCor, pedidos_itens.ipTextura, pedidos_itens.ipTamanho, pedidos_itens.ipSeq, representantes_m.rpNome, representantes_m.rpTelefone, representantes_m.rpCidade, representantes_m.rpEstado, representantes_m.rpEmail, produtos_cores_m.pcTitulo, texturas_m.teTitulo, produtos_m.prTitulo, produtos_m.prRef, produtos_m.prCategoria, produtos_m.prColecao, colecoes_m.coTitulo, categorias_m.caTitulo FROM pedidos INNER JOIN pedidos_itens ON pedidos.peId = pedidos_itens.ipPedido INNER JOIN representantes_m ON pedidos.peRepresentante = representantes_m.rpId INNER JOIN produtos_cores_m ON pedidos_itens.ipProduto = produtos_cores_m.pcProduto INNER JOIN texturas_m ON pedidos_itens.ipProduto = texturas_m.teProduto INNER JOIN produtos_m ON pedidos_itens.ipProduto = produtos_m.prId INNER JOIN colecoes_m ON produtos_m.prColecao = colecoes_m.coId INNER JOIN categorias_m ON produtos_m.prCategoria = categorias_m.caId WHERE (pedidos.peId = 2) ORDER BY pedidos.peId DESC

JLFerrari
  • 155
  • 3
  • 16

2 Answers2

1

Try this

 $db = Zend_Db_Table::getDefaultAdapter();

    $select = $db->select()
    $select->setIntegrityCheck(FALSE); //Now it will join

                     ->from('pedidos', array('peId', 'peRepresentante', 'peData', 'peStatus'))
                     ->joinInner('pedidos_itens', 'pedidos.peId = pedidos_itens.ipPedido', array('ipProduto', 'ipQtde', 'ipCor', 'ipTextura', 'ipTamanho', 'ipSeq'))
                     ->joinInner('representantes_m', 'pedidos.peRepresentante = representantes_m.rpId', array('rpNome', 'rpTelefone', 'rpCidade', 'rpEstado', 'rpEmail'))
                     ->joinInner('produtos_m', 'pedidos_itens.ipPedido = produtos_m.prId', array('prTitulo', 'prRef', 'prCategoria', 'prColecao'))
                     ->joinInner('produtos_cores_m', 'pedidos_itens.ipProduto = produtos_cores_m.pcProduto', array('pcTitulo'))
                     ->joinInner('texturas_m', 'pedidos_itens.ipProduto = texturas_m.teProduto', array('teTitulo'))
                     ->joinInner('colecoes_m', 'produtos_m.prColecao = colecoes_m.coId', array('coTitulo'))
                     ->joinInner('categorias_m', 'produtos_m.prCategoria = categorias_m.caId', array('caTitulo'))
                     ->where('pedidos.peId = 2')
                     ->order('pedidos.peId DESC');

    $resultado = $db->query($select)->fetchAll();
coolguy
  • 7,866
  • 9
  • 45
  • 71
0

You cannot use join for table object. you should do using adapter

So, you should use

$tabela->getAdapter()->select()

and you should use from method

 $tabela->getAdapter()->select()->from($this, array())
Venu
  • 7,243
  • 4
  • 39
  • 54
  • echo $select; Now you should debug the query. echo it and run it in phpmyadmin or some admin tool – Venu May 23 '12 at 13:08
  • It is possible to join using a DbTable, you just need to add `->setIntegrityCheck(false)` after the `select()`. – drew010 May 24 '12 at 00:29