MS
function onReload () Como fazer filtros ?
Boa tarde, gostaria de saber como faço para fazer filtros para apresentar no datagrid.
Como exemplo dos filtros
select * from "PROJETO" where now() between "data_inicio" and "data_final";
select * from "PROJETO" where "data_inicio" between now() and "data_final";
select * from "PROJETO" where "data_inicio" > now();
Como exemplo dos filtros
select * from "PROJETO" where now() between "data_inicio" and "data_final";
select * from "PROJETO" where "data_inicio" between now() and "data_final";
select * from "PROJETO" where "data_inicio" > now();
- <?php
- class Projeto extends TPage
- {
- private $datagrid;
- public function __construct()
- {
- parent::__construct();
- // creates one datagrid
- $this->datagrid = new BootstrapDatagridWrapper(new TQuickGrid);
- //$this->datagrid->style = 'min-width: 1600px';
- $this->datagrid->width = "100%";
- $this->datagrid->setHeight(300);
- $this->datagrid->makeScrollable();
- $col_cliente = new TDataGridColumn('projeto', 'Projeto', 'center', '10%');
- $col_descricao = new TDataGridColumn( 'descricao', 'Descricao', 'left','10%');
- $col_data_inicial = new TDataGridColumn( 'data_inicial', 'Data Inicial', 'left','10%');
- $col_data_final = new TDataGridColumn('data_final', 'Data Final', 'left','10%');
- // add the columns
- $this->datagrid->addColumn($col_cliente);
- $this->datagrid->addColumn($col_descricao);
- $this->datagrid->addColumn($col_data_inicial);
- $this->datagrid->addColumn($col_data_final);
- $col_cliente->setAction( new TAction([$this, 'onReload']), ['order' => 'cliente']);
- $col_do_im->setAction( new TAction([$this, 'onReload']), ['order' => 'descricao']);
- // creates the datagrid model
- $this->datagrid->createModel();
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- // wrap the page content using vertical box
- $vbox = new TVBox;
- $vbox->style = 'width: 100%';
- $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- //$vbox->add($panel);
- // $vbox->add($this->form);
- $vbox->add(TPanelGroup::pack('', $this->datagrid, $this->pageNavigation)); // add a row for page navigation
- TTransaction::close(); // close transaction
- parent::add($vbox);
- }
- /**
- * Load the data into the datagrid
- */
- public function onReload($param = NULL)
- {
- try
- {
- TTransaction::open('sample');
- $repository = new TRepository('SystemChange');
- $limit = 10;
- $criteria = new TCriteria;
- if (empty($param['order']))
- {
- $param['order'] = 'id';
- $param['direction'] = 'asc';
- }
- $criteria->setProperties($param); // order, offset
- $criteria->setProperty('limit', $limit);
- $objects = $repository->load( $criteria );
- $this->datagrid->clear();
- if ($objects)
- {
- foreach($objects as $object)
- {
- $this->datagrid->addItem($object);
- }
- }
- $criteria->resetProperties();
- $count = $repository->count($criteria);
- $this->pageNavigation->setCount($count); // count of records
- $this->pageNavigation->setProperties($param); // order, page
- $this->pageNavigation->setLimit($limit); // limit
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback(); // undo all pending operations
- }
- $this->loaded = TRUE;
- }
- function show()
- {
- $this->onReload();
- parent::show();
- }
- }
- ?>
adianti.com.br/framework_files/tutor/index.php?class=CriteriaView
Consegui usar a TCriteria porém quando quero fazer um filtro pegando dados da tabela do MYSQL a consulta passa o SELECT errado para o banco:
<PHP?
$criteria->add(new TFilter( 'now()','BETWEEN', data_inicial , data_final));
echo $criteria->dump();
o dump retorna: (now() BETWEEN 'data_inicial' AND 'data_final') com aspas simples no 'data_inicial' e 'data_final';
O correto da seria a expressão: (now() BETWEEN data_inicial AND data_final )
Sem aspas.
?>
Como faço para resolver ?
Obrigado desde já.
Consegui usar a TCriteria porém quando quero fazer um filtro pegando dados da tabela do MYSQL a consulta passa o SELECT errado para o banco:
<?php
$criteria->add(new TFilter( 'now()','BETWEEN', data_inicial , data_final));
echo $criteria->dump();
o dump retorna: (now() BETWEEN 'data_inicial' AND 'data_final') com aspas simples no 'data_inicial' e 'data_final';
O correto da seria a expressão: (now() BETWEEN data_inicial AND data_final )
Sem aspas.
?>
Como faço para resolver ?
Obrigado desde já.
Você precisa usar o prefixo "NOESC:" antes desses valores:
Bom dia, Nataniel.
Deu certinho, era isso mesmo que precisava.
Grato.
Bom dia, Nataniel.
Deu certinho, era isso mesmo que precisava.
Grato.