Ir para conteúdo

POWERED BY:

Arquivado

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

Jobson Anselmo Chinelli

Exibir dados do BD em um select

Recommended Posts

Bom dia galera, estou com dificuldades para exibir dados de uma tabela do banco de dados em um formulario de consulta de dados.
Eu tenho uma tabela que armazena dados de uma empresa, e quero que em um select ele apareca todos as razoes sociais ja cadastradas para o usuario fazer consulta referente aquela empresa, porem nao aparece nada.



$this->loadModel('Group');
$groups = $this->Group->find('all');

no meu controller eu carregei a model da tabela que corresponde aos cadastros e na viu eu dei o foreach

foreach ($groups as $group) {
$options = array('' => $group['Group']['razao_social']);
}
echo $this->Form->input('razaosocial', array('options' => $options,'name' => 'razao_social','label' => 'Razão Social do Indicador:','default' => '1'));

porem nao aparece nada o que pode ser?
// função para consulta de dados
public function consulta(){
	$this->set('title_for_layout', 'Consulta');
	$this->Indicacoes->recursive = 0;
	$arraycerta = array();
	$this->loadModel('Group');
	$groups = $this->Group->find('all');
	$pi = false;
	$conditions = array();
	$this->request->data = $this->request->query;
	unset($this->request->data['submit']);
	$this->request->data = $arraycerta;
	$conditions = array_merge($this->request->data,$conditions);
	$conditions = $this->request->data;
	$conditions['user_id = '] = $this->Session->read('Auth.User.id');
	$this->set('clientes', $this->paginate(null,$conditions));
}	

//view para exibir os campos

<?php echo $this->Form->create('Indicacoes', array('enctype' => 'multipart/form-data')); ?>
		<h4 style="display:inline;">Filtros:</h4>
		<br/><br/>
		<?php 
		var_dump($groups);
		foreach ($groups as $group) {
			$options = array('' => $group['Group']['razao_social']);
		}
		
		//echo $this->Form->input('razaosocial', array('options' => $options,'name' => 'razao_social','label' => 'Razão Social do Indicador:','default' => '1'));
		echo $this->Form->input('nomefantasia', array('label' => 'Nome Fantasia:', 'size' => 108));
		echo $this->Form->input('cpfcnpj', array('label' => 'CPF / CNPJ:', 'size' => 40,'class'=>'CNPJ'));

		$options = array('' => 'Selecione:','Autorizado' => 'Aguardando retorno','Carta' => 'Proposta Pendente', 'Cancelamento' => 'Proposta Aceita', 'Denegada' => 'Proposta Rejeitada', 'Lote' => 'Favor Atualizar Cadastro');
		echo $this->Form->input('infProt_xMotivo', array('options' => $options,'name' => 'infProt_xMotivo','label' => 'Status:','default' => '1'));
		?>

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, vou testar aqui!



Vlw cara Funcionou sim, obrigadao mesmo!!



Cara ja ta funcionando só que eu fiz de um jeito um tanto diferente

//no controller

$this->loadModel('Group');	
	$this->set('groups', $this->Group->find('list', array( 'fields' => 'razao_social', 'order' => 'razao_social ASC')));

//na view

echo $this->Form->input ('razao_social',array('type' => 'select','label' => 'Razão Social do Indicador', 'options' => array($groups)));

 

Só que agora não sei se é um problema na programação, pois o select ta funcionando, porém quando eu clico para ver as opções tem um espaço em branco ai eu tenho que descer a barra de rolagem para ver as opções. O que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, outro probleminha, as indicações são feitas por usuários, e na minha consulta eu quero mostrar só usuários que indicaram para fazer a consulta, por exemplo.
5 usuários fizeram indicações, por tanto eu vou ter um select com apenas estes 5 usuários para verificar o que cada usuário cadastrou.

ai eu fiz o seguinte código:

//no controller

$indicacoes = $this->Indicacoes->find('all', array('group' => 'user_id'));

//na view

foreach($indicacoes as $indicacao){
   			$options[$indicacoes['User']['id']] = $indicacoes['User']['nome'];
		}
		echo $this->Form->input ('user_id',array('type' => 'select','label' => 'Usuário Indicador', 'options' => array($options), 'empty' => 'Selecione...'));

 

Ele não apresenta erro, mas não esta puxando nenhum dado, sendo que tem registros na tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode verificar o sql que ele está gerando para tentar descobrir qual é o problema.

o debug está 2 no core.php ?

 

tenta assim:

 

$indicacoes = $this->Indicacoes->find('all', array('group' => 'Indicacao.user_id'));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com a alteração que vc me indicou apareçeu o seguinte erro:

 

 

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Indicacao.user_id' in 'group statement'

 

SQL Query: SELECT `Indicacoes`.`id`, `Indicacoes`.`tipocliente`, `Indicacoes`.`razaosocial`, `Indicacoes`.`nomefantasia`, `Indicacoes`.`cpfcnpj`, `Indicacoes`.`telefone`, `Indicacoes`.`user_id`, `Indicacoes`.`group_id`, `Indicacoes`.`created`, `Indicacoes`.`modified`, `Indicacoes`.`emailcontato`, `Indicacoes`.`nomecontato`, `Indicacoes`.`ramal`, `Indicacoes`.`departamento` FROM `cake`.`indicacoes` AS `Indicacoes` WHERE 1 = 1 GROUP BY `Indicacao`.`user_id`

 

só nao consigo descobrir o por que de no group by estar indicacao no lugar de indicacoes

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é no SQL, agora que vi, o problema é que o controller nao esta enxergando a model, por isso nao apareçe nada eu acho, eu fiz uns testes usando var_dump para verificar e constatei que é isso mesmo.

// no controller

$indicacoes = $this->Indicacoes->find('all',array('group'=>'Indicacoes.user_id'));

// na view

foreach($indicacoes as $indicacao){
   			$options[$indicacao['Indicacoes']['user_id']] = $indicacao['User']['username'];
		}
		
		echo $this->Form->input ('user_id',array('type' => 'select','name' => 'user_id','label' => 'Usuário Indicador', 'options' => array($options), 'empty' => 'Selecione...'));

 

só que ele nao ta enxergando a model sendo que nas outras functions do projeto ele ve normalmente.



Desculpem-me por estar perguntando tanto assim, é que eu estou a pouco tempo mexendo com cakephp, por isso estou tendo um pouco de dificuldades...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok.

como eu disse antes, você não tá usando as convenções do cake.

se você tem uma tabela indicacoes(plural), você terá um controller indicacoes(plural) e um model indicacao(singular)

aí no controller indicacoes você faria $this->Indicacao->find('all')

se fosse num controller usuarios, por exemplo, eles precisariam tem o relacionamento no model e ficaria $this->Usuario->Indicacao->find('all')

 

e se você tivesse usando as convenções você não precisaria desse foreach na view, seria apenas echo $this->Form->input('user_id')

e find seria $this->User->find('list')

 

faz o seguinte,

posta todo o código do teu controller e model do user e do indicacoes no bin.cakephp.org

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel_MangueBoy, peço desculpas novamente e venho novamente atraz de uma ajuda....

 

Eu estou com problemas ao fazer o filtro de consulta de dados da minha aplicação.

Eu fiz no meu controller para filtrar pros selects corretamente de modo ao select estar correto. segue código abaixo do select e da view.

OBS: os relacionamentos estao corretos:

 

// controller

public function view(){
	$this->set('title_for_layout', 'Consulta');
	$this->Indicacao->recursive = 2;
	$arraycerta = array();
	$indicacoes = $this->Indicacao->find('all', array('group' => 'user_id'));
	$this->set('indicacoes',$indicacoes);
	$conditions = array();
	$arraycerta = array();
	$this->request->data = $this->request->query;
	unset($this->request->data['tipo']);
	unset($this->request->data['submit']);
	foreach($this->request->data as $key => $value){
			$arraycerta[$key.' LIKE '] = '%'.$value.'%';
		}
	$this->request->data = $arraycerta;
	$conditions = $this->request->data;
	$this->set('indicacoes', $this->Indicacao->find('all',array('conditions' => $contitions)));

//na view

<div class="search" style="width:900px;float:left;">
		<?php echo $this->Form->create(array('action' => '/../cliente_fornecedor/view')); ?>
		<h4 style="display:inline;">Filtros de Indicações Efetuadas:</h4>
		<br/><br/>
		<?php
		foreach ($indicacoes as $indicacao) {
			$users[$indicacao['User']['id']] = $indicacao['User']['username'];
			$razaosocial[$indicacao['Group']['id']] = $indicacao['Group']['razao_social'];
			$nomefantasia[$indicacao['Group']['id']] = $indicacao['Group']['nome_fantasia'];
		}
		echo $this->Form->input ('group_id',array('type' => 'select','label' => 'Razão Social do Indicador', 'options' => array($razaosocial), 'empty' => 'Selecione...'));

		echo $this->Form->input ('nome_fantasia',array('type' => 'select','label' => 'Nome fantasia do indicador', 'options' => array($nomefantasia), 'empty' => 'Selecione...'));
		echo "<br><br><br><br>";		
		echo $this->Form->input ('user_id',array('type' => 'select','label' => 'Usuário indicador', 'options' => array($users), 'empty' => 'Selecione...'));
		echo $this->Form->input('cpfcnpj', array('label' => 'CNPJ do Indicador:', 'size' => 40,'class'=>'CNPJ'));
		$options = array('' => 'Selecione:','Autorizado' => 'Aguardando retorno','Carta' => 'Proposta Pendente', 'Cancelamento' => 'Proposta Aceita', 'Denegada' => 'Proposta Rejeitada', 'Lote' => 'Favor Atualizar Cadastro');
		echo $this->Form->input('infProt_xMotivo', array('options' => $options,'name' => 'infProt_xMotivo','label' => 'Status:','default' => '1'));
		?>
		<br/><br/><br/><br/>
		<input type="submit" name="submit" value="Pesquisar"/>
		<?php echo $this->Form->end(); ?>
		<br/><br/><br/><br/>
	</div>
	

 

o form de consulta ta funcionando corretamente, porem quando clico no botao de consulta ele nao consulta e nao aparece erro algum

Exemplo: se eu selecionar para consultar indicacoes da empresa X e clicar em Pesquisar, nao acontece nada no sistema, ele nao puxa as indicacoes daquela unica empresa.

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.