Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Akssio

[Resolvido] Fazendo um select com JOIN no Zend Framework

Recommended Posts

tenho a seguinte consulta...:

 

$dados = $db->select()->from(array('t' => 'categoria'),
			     array('status', 'nome','id_cliente','id'))
			     ->join(array('c' => 'clientes'),
		             't.id_cliente = c.id')
			     ->query()->fetchAll();

acontece que no resultado ele está me retornando o id da tabela cliente...ao invés do id da tabela categoria!!...

os campos retornados não seriam o daquele segundo array???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao tem como especificar de qual tabela é o Id ? Como num select normal ? Tem neh.

$dados = $db->select()->from(array('t' => 'categoria'),
                             array('status', 'nome','t.id_cliente','id'))
                             ->join(array('c' => 'clientes'),
                             't.id_cliente = c.id')
                             ->query()->fetchAll();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como você por outro nome para a coluna ?

Tipo:

 

Select Coluna AS Novo_Nome From Tabela

 

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei assim!...

 

$dados = $db->select("id as id_cat")->from(array('t' => 'categoria'),
                             array('status', 'nome','id_cliente','id_cat'))
                             ->join(array('c' => 'clientes'),
                             't.id_cliente = c.id')
                             ->query()->fetchAll();

deste modo ele não está renomeando pois acusa que não encontrou o campo id_cat!...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não assim, assim:

$dados = $db->select("id as id_cat")->from(array('t' => 'categoria'),
                             array('status', 'nome','id_cliente','id as id_cat'))
                             ->join(array('c' => 'clientes'),
                             't.id_cliente = c.id')
                             ->query()->fetchAll();

Dae quando você for pegar o valor do campo, você nao pega como id, pega como id_cat.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não assim, assim:

$dados = $db->select("id as id_cat")->from(array('t' => 'categoria'),
                             array('status', 'nome','id_cliente','id as id_cat'))
                             ->join(array('c' => 'clientes'),
                             't.id_cliente = c.id')
                             ->query()->fetchAll();

Dae quando você for pegar o valor do campo, você nao pega como id, pega como id_cat.

 

 

Eu fiz de forma idêntica só que estou a ter problemas ao apresentar os resultados.

Eu apresento da seguinte maneira:

 

foreach($this->paginator as $markers) : 
		
			
		?>
         <tr class="bg">
            <td class="first style2">
				<?php echo stripslashes($markers->name);?>
           </td>
            <td>
				<?php echo stripslashes($markers->status_name);?>
           </td>
           <td>
            	<a href="<?php echo $this->url(array('controller'=>'tmultimedia',
			'action'=>'edit', 'id'=>$markers->id));?>"><img src="/~cams/img/camsadmin/edit-icon.gif" width="16" height="16" alt="edit" /></a>
           </td>
            <td>
            	<a href="<?php echo $this->url(array('controller'=>'tmultimedia',
			'action'=>'del', 'id'=>$markers->id));?>"><img src="/~cams/img/camsadmin/hr.gif" width="16" height="16" alt="" /></a>
			</td>
		</tr>
	
			<?php endforeach;?>

Só que em vez de apresentar por exemplo os 2 registos que tenho na DB, apresenta 4. Se tiver 3, apresenta 9. Ou seja, por cada resultado apresenta o número de registos.

 

Código no controller:


 $table = new Tmultimedia();
	 $this->view->Tmultimedia = $table->select('name as status_name')
	  ->setIntegrityCheck(false)
                 ->from(array('t' => 'multimedia_type'),
                    array('id', 'name', 'status'))
                 ->join(array('t2' => 'status_type'),
                  't.status = t2.id', array('name as status_name','name_order'));
				  $rows = $table->fetchAll($this->view->Tmultimedia);
				   $page=$this->_getParam('page',1);
		$paginator = Zend_Paginator::factory($this->view->Tmultimedia);
		$paginator->setItemCountPerPage(10);
		$paginator->setCurrentPageNumber($page);
		$this->view->paginator = $paginator;

Será que me podes ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Mas não assim, assim:

$dados = $db->select("id as id_cat")->from(array('t' => 'categoria'),
                             array('status', 'nome','id_cliente','id as id_cat'))
                             ->join(array('c' => 'clientes'),
                             't.id_cliente = c.id')
                             ->query()->fetchAll();

Dae quando você for pegar o valor do campo, você nao pega como id, pega como id_cat.

 

 

Eu fiz de forma idêntica só que estou a ter problemas ao apresentar os resultados.

Eu apresento da seguinte maneira:

 

foreach($this->paginator as $markers) : 
		
			
		?>
         <tr class="bg">
            <td class="first style2">
				<?php echo stripslashes($markers->name);?>
           </td>
            <td>
				<?php echo stripslashes($markers->status_name);?>
           </td>
           <td>
            	<a href="<?php echo $this->url(array('controller'=>'tmultimedia',
			'action'=>'edit', 'id'=>$markers->id));?>"><img src="/~cams/img/camsadmin/edit-icon.gif" width="16" height="16" alt="edit" /></a>
           </td>
            <td>
            	<a href="<?php echo $this->url(array('controller'=>'tmultimedia',
			'action'=>'del', 'id'=>$markers->id));?>"><img src="/~cams/img/camsadmin/hr.gif" width="16" height="16" alt="" /></a>
			</td>
		</tr>
	
			<?php endforeach;?>

Só que em vez de apresentar por exemplo os 2 registos que tenho na DB, apresenta 4. Se tiver 3, apresenta 9. Ou seja, por cada resultado apresenta o número de registos.

 

Código no controller:


 $table = new Tmultimedia();
	 $this->view->Tmultimedia = $table->select('name as status_name')
	  ->setIntegrityCheck(false)
                 ->from(array('t' => 'multimedia_type'),
                    array('id', 'name', 'status'))
                 ->join(array('t2' => 'status_type'),
                  't.status = t2.id', array('name as status_name','name_order'));
				  $rows = $table->fetchAll($this->view->Tmultimedia);
				   $page=$this->_getParam('page',1);
		$paginator = Zend_Paginator::factory($this->view->Tmultimedia);
		$paginator->setItemCountPerPage(10);
		$paginator->setCurrentPageNumber($page);
		$this->view->paginator = $paginator;

Será que me podes ajudar?

 

Salve,

 

o Paginator retorna um vetor. Assim:

 

$reg['status_name'];

 

Agora você renomeia 2 vezes 'name' para 'status_name'. Use o prefixo nos campos: t.name

----

                   // no join, esse 'name' é dessa tabela 'status_type'? Se for use t2. antes ficando: t2.name 
                   // renomear campos faz chave => valor: 'novo_nome_do_campo' => 't.nome_verdadeiro_do_campo'
                   // ficando: 'status_name' => 't2.name'
                   // mas com isso voce está renomeando 2 campos para o mesmo 'novo nome'


$table = new Tmultimedia();

$registros = $table->select()
                   ->setIntegrityCheck(false)
                   ->from( array('t' => 'multimedia_type'), array('t.id', 'status_name' => 't.name', 't.status') )
                   ->join(array('t2' => 'status_type'), 't.status = t2.id', array('name as status_name','name_order')); 
                   ->query()
                   ->fetchAll($this->view->Tmultimedia);
                                 
$page=$this->_getParam('page',1);
$paginator = Zend_Paginator::factory($registros);
$paginator->setItemCountPerPage(10);
$paginator->setCurrentPageNumber($page);

$this->view->paginator = $paginator;
---

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.