Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
Criteria não gera o filtro correto com o operador IN Bom dia, Esta acontecendo o seguinte problema: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: ...OM socio WHERE (ativo = $1 AND cargo_funcao_id in $2 AND sex... ^ Verifiquei que a sql não foi corretamente gerada: SELECT id, sexo_id, cargo_funcao_id, estado_civil_id, nome, cpf, rg, matricula, ade, email, data_nascimento, cadastrado, pai, mae, data_admis...
RC
Criteria não gera o filtro correto com o operador IN  
Bom dia,
Esta acontecendo o seguinte problema:
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: ...OM socio WHERE (ativo = $1 AND cargo_funcao_id in $2 AND sex... ^

Verifiquei que a sql não foi corretamente gerada:
SELECT id, sexo_id, cargo_funcao_id, estado_civil_id, nome, cpf, rg, matricula, ade, email, data_nascimento, cadastrado, pai, mae, data_admissao, foto, ativo, cidade_nascimento, departamento, revisado FROM socio WHERE (ativo = '1' AND cargo_funcao_id in '2,11,14,1' AND sexo_id in '2,1' AND estado_civil_id in '2,6')

O problema é nos filtro com operador IN, como pode se ver na sql acima: cargo_funcao_id in '2,11,14,1' AND sexo_id in '2,1' AND estado_civil_id in '2,6'

O correto seria ficar assim: cargo_funcao_id in (2,11,14,1) AND sexo_id in (2,1) AND estado_civil_id in (2,6)

Peço ajuda e agradeço!!!

Segue abaixo a classe de controle:
  1. <?php 
  1. <?php
  2. class EmailMarketingForm extends TPage
  3. {
  4.     protected $form;
  5.     private $formFields = [];
  6.     private static $database 'socium';
  7.     private static $activeRecord 'Socio';
  8.     private static $primaryKey 'id';
  9.     private static $formName 'form_Socio';
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         // creates the form
  18.         $this->form = new BootstrapFormBuilder(self::$formName);
  19.         // define the form title
  20.         $this->form->setFormTitle("E-mail Marketing");
  21.         $ativo = new TRadioGroup('ativo');
  22.         $sexo_id = new TDBCheckGroup('sexo_id''socium''Sexo''id''{descricao}','descricao asc'  );
  23.         $estado_civil_id = new TDBCheckGroup('estado_civil_id''socium''EstadoCivil''id''{descricao}','descricao asc'  );
  24.         $cargo_funcao_id = new TDBSelect('cargo_funcao_id''socium''CargoFuncao''id''{descricao}','descricao asc'  );
  25.         $email_assunto = new TEntry('email_assunto');
  26.         $email_mensagem = new THtmlEditor('email_mensagem');
  27.         $email_assunto->addValidation("Assunto do e-mail", new TRequiredValidator()); 
  28.         $email_mensagem->addValidation("E-mail", new TRequiredValidator()); 
  29.         $ativo->addItems(['1'=>'Ativo','0'=>'Inativo',''=>'Ambos']);
  30.         $estado_civil_id->setBreakItems(3);
  31.         $email_assunto->setMaxLength(200);
  32.         $ativo->setLayout('horizontal');
  33.         $sexo_id->setLayout('horizontal');
  34.         $estado_civil_id->setLayout('horizontal');
  35.         $ativo->setUseButton();
  36.         $sexo_id->setUseButton();
  37.         $estado_civil_id->setUseButton();
  38.         $sexo_id->setValueSeparator(',');
  39.         $estado_civil_id->setValueSeparator(',');
  40.         $cargo_funcao_id->setValueSeparator(',');
  41.         $ativo->setSize(90);
  42.         $sexo_id->setSize(90);
  43.         $estado_civil_id->setSize(90);
  44.         $email_assunto->setSize('100%');
  45.         $cargo_funcao_id->setSize(270130);
  46.         $email_mensagem->setSize('100%'600);
  47.         
  48.         //carrega o template de email
  49.         $arquivo 'app/resources/emailpadrao.html';
  50.         if( is_file($arquivo) )
  51.         {
  52.             $email_mensagem->setValuefile_get_contents($arquivo) );
  53.         }
  54.         
  55.         $row1 $this->form->addFields([new TLabel("Situação:"null'14px'null)],[$ativo],[new TLabel("Sexo:"null'14px'null)],[$sexo_id]);
  56.         $row2 $this->form->addFields([new TLabel("Estado Civil:"null'14px'null)],[$estado_civil_id],[new TLabel("Cargo/Função:"null'14px'null)],[$cargo_funcao_id]);
  57.         $row3 $this->form->addContent([new TFormSeparator(""'#333333''18''#eeeeee')]);
  58.         $row4 $this->form->addFields([new TLabel("Assunto:"'#ff0000''14px'null)],[$email_assunto]);
  59.         $row5 $this->form->addFields([new TLabel("E-mail:"'#ff0000''14px'null)],[$email_mensagem]);
  60.         // create the form actions
  61.         $btn_onsave $this->form->addAction("Enviar E-mail", new TAction([$this'onSave']), 'fas:mail-bulk #ffffff');
  62.         $btn_onsave->addStyleClass('btn-warning'); 
  63.         // vertical box container
  64.         $container = new TVBox;
  65.         $container->style 'width: 100%';
  66.         $container->class 'form-container';
  67.         $container->add(TBreadCrumb::create(["Sócios","E-mail Marketing"]));
  68.         $container->add($this->form);
  69.         parent::add($container);
  70.     }
  71.     public function onSave($param null
  72.     {
  73.         try
  74.         {
  75.             TTransaction::open(self::$database); // open a transaction   
  76.             TTransaction::dump();      
  77.             $messageAction null;
  78.             $this->form->validate(); // validate form data            
  79.             $data $this->form->getData(); // get form data as array   
  80.             $this->form->setData($data); // fill form data
  81.             
  82.             //prepara os critérios de filtro       
  83.             $repository = new TRepository(self::$activeRecord);      
  84.             $criteria   = new TCriteria;            
  85.             
  86.             if (isset($data->ativo) AND ( (is_scalar($data->ativo) AND $data->ativo !== '') OR (is_array($data->ativo) AND (!empty($data->ativo)) )) )
  87.             {    
  88.                 $criteria->add( new TFilter('ativo''='$data->ativo) );
  89.             }
  90.     
  91.             if (isset($data->cargo_funcao_id) AND ( (is_scalar($data->cargo_funcao_id) AND $data->cargo_funcao_id !== '') OR (is_array($data->cargo_funcao_id) AND (!empty($data->cargo_funcao_id)) )) )
  92.             {    
  93.                 $criteria->add( new TFilter('cargo_funcao_id''in'$data->cargo_funcao_id) );
  94.             }
  95.     
  96.             if (isset($data->sexo_id) AND ( (is_scalar($data->sexo_id) AND $data->sexo_id !== '') OR (is_array($data->sexo_id) AND (!empty($data->sexo_id)) )) )
  97.             {    
  98.                 $criteria->add( new TFilter('sexo_id''in'$data->sexo_id) );
  99.             }
  100.     
  101.             if (isset($data->estado_civil_id) AND ( (is_scalar($data->estado_civil_id) AND $data->estado_civil_id !== '') OR (is_array($data->estado_civil_id) AND (!empty($data->estado_civil_id)) )) )
  102.             {    
  103.                 $criteria->add( new TFilter('estado_civil_id''in'$data->estado_civil_id) );
  104.             }
  105.                         
  106.             Uteis::debug($criteria->dump());            
  107.             
  108.             $socios $repository->load($criteriaFALSE);                                  
  109.             
  110.             Uteis::debug($socios);
  111.             
  112.             TTransaction::close(); // close the transaction
  113.             /**
  114.             // To define an action to be executed on the message close event:
  115.             $messageAction = new TAction(['className', 'methodName']);
  116.             **/
  117.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'), $messageAction);
  118.         }
  119.         catch (Exception $e// in case of exception
  120.         {
  121.             //</catchAutoCode> 
  122.             new TMessage('error'$e->getMessage()); // shows the exception error message
  123.             $this->form->setData$this->form->getData() ); // keep form data
  124.             TTransaction::rollback(); // undo all pending operations
  125.         }
  126.     }
  127.     public function onShow($param null)
  128.     {
  129.     } 
  130. }
  131. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (2)


LC

Verifica ai se $data->sexo_id esta chegando ai como array
Para o IN da certo ele tem q receber um array
RC

Obrigado Leandro Coelho
funcionou perfeitamente.
Achei estranho o TDBCheckGroup e o TDBSelect não mandarem os dados em formato de array.