与zend模型的内部连接

时间:2012-05-23 12:55:44

标签: zend-framework zend-db

此脚本出现问题:

$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');

返回此错误:

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

-------编辑

我已经改变了这个:

$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();

它返回一个空数组,甚至还有记录。所以? :/

----编辑2

这是查询:

选择pedidospeIdpedidospeRepresentantepedidospeDatapedidos。{{1} },peStatuspedidos_itensipProdutopedidos_itensipQtdepedidos_itensipCorpedidos_itensipTexturapedidos_itensipTamanhopedidos_itensipSeqrepresentantes_mrpNomerepresentantes_m,{{ 1}}。rpTelefonerepresentantes_mrpCidaderepresentantes_mrpEstadorepresentantes_mrpEmail,{{1} }。produtos_cores_mpcTitulotexturas_mteTituloprodutos_mprTituloprodutos_mprRefprodutos_mprCategoriaprodutos_mprColecaocolecoes_m FROM coTitulo  INNER JOIN categorias_m ON pedidos.peId = pedidos_itens.ipPedido  INNER JOIN caTitulo ON pedidos.peRepresentante = representantes_m.rpId  INNER JOIN pedidos ON pedidos_itens.ipProduto = produtos_cores_m.pcProduto  INNER JOIN pedidos_itens ON pedidos_itens.ipProduto = texturas_m.teProduto  INNER JOIN representantes_m ON pedidos_itens.ipProduto = produtos_m.prId  INNER JOIN produtos_cores_m ON produtos_m.prColecao = colecoes_m.coId  INNER JOIN texturas_m ON produtos_m.prCategoria = categorias_m.caId WHERE(pedidos.peId = 2)ORDER BY produtos_mcolecoes_m DESC

2 个答案:

答案 0 :(得分:1)

试试这个

 $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();

答案 1 :(得分:0)

您不能对表对象使用join。你应该使用适配器

所以,你应该使用

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

你应该使用方法

 $tabela->getAdapter()->select()->from($this, array())