RB
Dificuldade em filtrar itens combo dinâmico
Olá, galera
Quero carregar itens no combo 2 conforme a categoria do combo 1, porém não estou conseguindo identificar onde estou errando na hora de fazer o filtro, alguém pode me ajudar ?
Segue abaixo fonte que setou utilizando.
Model Categoria
Model CategoriaJuridica
desde já obrigado pela atenção.
Quero carregar itens no combo 2 conforme a categoria do combo 1, porém não estou conseguindo identificar onde estou errando na hora de fazer o filtro, alguém pode me ajudar ?
Segue abaixo fonte que setou utilizando.
- <?php
- //adciona criterio de filtro categoria natureza juridica
- $filter = new TCriteria;
- $filter->add(new TFilter('id', '<', '4'));
- //categoria juridica
- $natureza_categoria = new TDBCombo('natureza_categoria_id','xxxx','CategoriaNaturezaJuridica','id','descricao','descricao',$filter);
- $natureza_categoria->setDefaultOption(false);
- $natureza_categoria->setSize('width:100%');
- $filter1 = new TCriteria;
- $filter1->add(new TFilter('categoria_id', '=',$natureza_categoria));
- //natureza juridica
- $cod_nat_juridica = new TDBCombo('natureza_juridica_id','centinel','NaturezaJuridica','id','codigo_descricao',$filter1);
- $cod_nat_juridica->setDefaultOption(false);
- $cod_nat_juridica->setChangeAction( new TAction( array($this, 'NaturezaJuridica')) );
- //metodo NaturezaJuridica
- public static function NaturezaJuridica($param)
- {
- try
- {
- TTransaction::open('xxxxx');
- if ($param['natureza_categoria_id'])
- {
- $criteria = TCriteria::create( ['categoria_id ' => $param['natureza_categoria_id'] ] );
- // formname, field, database, model, key, value, ordercolumn = NULL, criteria = NULL, startEmpty = FALSE
- TDBCombo::reloadFromModel('frm_empresa', 'categoria_id', 'centinel', 'NaturezaJuridica', 'id', '{descricao} ({id})', 'descricao', $criteria, TRUE);
- }
- else
- {
- TCombo::clearField('frm_empresa', 'natureza_juridica_id');
- }
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- ?>
Model Categoria
- <?php
- /**
- * NaturezaJuridica Active Record
- * @author <your-name-here>
- */
- class NaturezaJuridica extends TRecord
- {
- const TABLENAME = 'natureza_juridica';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'serial'; // {max, serial}
- private $categoria_natureza_juridica;
- private $juridica;
- /**
- * Constructor method
- */
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- parent::addAttribute('codigo_descricao');
- parent::addAttribute('categoria_id');
- }
- /**
- * Method set_categoria_natureza_juridica
- * Sample of usage: $natureza_juridica->categoria_natureza_juridica = $object;
- * @param $object Instance of CategoriaNaturezaJuridica
- */
- public function set_categoria_natureza_juridica(CategoriaNaturezaJuridica $object)
- {
- $this->categoria_natureza_juridica = $object;
- $this->categoria_natureza_juridica_id = $object->id;
- }
- /**
- * Method get_categoria_natureza_juridica
- * Sample of usage: $natureza_juridica->categoria_natureza_juridica->attribute;
- * @returns CategoriaNaturezaJuridica instance
- */
- public function get_categoria_natureza_juridica()
- {
- // loads the associated object
- if (empty($this->categoria_natureza_juridica))
- $this->categoria_natureza_juridica = new CategoriaNaturezaJuridica($this->categoria_natureza_juridica_id);
- // returns the associated object
- return $this->categoria_natureza_juridica;
- }
- ?>
Model CategoriaJuridica
- <?php
- /**
- * CategoriaNaturezaJuridica Active Record
- * @author <your-name-here>
- */
- class CategoriaNaturezaJuridica extends TRecord
- {
- const TABLENAME = 'categoria_juridica';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'serial'; // {max, serial}
- /**
- * Constructor method
- */
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- parent::addAttribute('descricao');
- }
- }
- ?>
desde já obrigado pela atenção.
Olá Rubens,
Dê uma olhada em:
https://www.adianti.com.br/framework_files/tutor/index.php?class=FormInteraction
Tá faltando 1 parâmetro na segunda instância da TDBCombo, linha 15
Experimente primeiro deixar o $filter1 em branco para mudar de acordo com o combo 2
na linha 35 tente
Boa sorte
Experimente primeiro deixar o $filter1 em branco para mudar de acordo com o combo 2
$filter1 = new TCriteria;
$filter1->add(new TFilter('categoria_id', '<', '0'));
na linha 35 tente
TCombo::clearField('frm_empresa', 'categoria_id');
Boa sorte
Miuller,
fiz como indicou porém combo dois não carrega nenhum item.
Só lembrando que a ordem é seleciona item combo 1 e carrega combo 2 conforme item combo um.
//Trecho alterado
Primeiramente a mensagem de erro que vc mandou o print na tela diz que está ocorrendo um erro de sql, ou seja, a combo não está conseguindo filtrar(not be converted to string), estava faltando um parâmetro na sua combo.
Reescrevi o código das combos para facilitar o entendimento
Segundo, sua combo1 tem nome, se chama natureza_categoria_id, então o parâmetro da primeira combo se chama "natureza_categoria_id", com isso sua function vai ordenar a segunda combo(natureza_juridica_id) de acordo com a primeira, abaixo tentei reescrever o código, observe o nome das combos
Não testei, mas a lógica é essa, se não der certo me manda um email que eu te envio um exemplo de código estado x cidade. boa sorte
Miuller,
Mais uma vez obrigado pela atenção,alterei conforme indicou mas sem sucesso.
simplesmente não carrega os dados do combo 2, nem da erro.
<a href="attach/3991/Captura de tela de 2017-12-12 14-04-38.png">Captura de tela de 2017-12-12 14-04-38.png</a>
Miuller,
Consegui resolver, estava cometendo um amadorismo na hora de atribuir a ação a categoria.
Valeu pela força.