menu
Fórum Adianti
menu Menu
dúvida TDBUniqueSearch TDBUniqueSearch busca like %palavra% , mas gostaria de pesquisar pelo começo da descrição e não contendo, exemplo: like 'palavra%' ...
RS
dúvida TDBUniqueSearch  
TDBUniqueSearch busca like %palavra% , mas gostaria de pesquisar pelo começo da descrição e não contendo, exemplo: like 'palavra%'


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 (3)


NR

Tem um service responsável pela busca. Por padrão é a classe AdiantiMultiSearchService. Você pode criar seu próprio service e modificar o criteria conforme desejado. Depois basta apontar o componente para esse service:
  1. <?php
  2. $unique = new TDBUniqueSearch...
  3. $unique->setService('SuaClasse');
  4. ?>
RS

mais uma vez obrigado, abraço
RS

bom dia Nataniel, fiz a alteração aqui $filter = new TFilter($column, $operator, "{$param['value']}%");
tirando o % do inicio no AdiantiMultiSearchService, funcionou beleza. ai copiei para outra classe : MultiSearchService
e defino pelo setService, e não busca. a classe nova coloquei no app/service e no lib/adianti/service.


e no formulário aonde tem a TDBUnique fiz assim:

$produto_id = new TDBUniqueSearch('list_produto_id[]', 'unit_database', 'Produtos', 'pro_codigo','pro_descricao','pro_descricao'); $produto_id->setMinLength(0); $produto_id->setService('MultiSearchService');



  1. <?php
  2. namespace Adianti\Service;
  3. use Adianti\Core\AdiantiApplicationConfig;
  4. use Adianti\Util\AdiantiStringConversion;
  5. use Adianti\Database\TTransaction;
  6. use Adianti\Database\TRepository;
  7. use Adianti\Database\TCriteria;
  8. use Adianti\Database\TFilter;
  9. use Adianti\Database\TExpression;
  10. use StdClass;
  11. use Exception;
  12. /**
  13.  * MultiSearch backend
  14.  *
  15.  * @version    7.3
  16.  * @package    service
  17.  * @author     Pablo Dall'Oglio
  18.  * @author     Matheus Agnes Dias
  19.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  20.  * @license    http://www.adianti.com.br/framework-license
  21.  */
  22. class MultiSearchService
  23. {
  24.     /**
  25.      * Search by the given word inside a model
  26.      */
  27.     public static function onSearch($param null)
  28.     {
  29.         $key  $param['key'];
  30.         $ini  AdiantiApplicationConfig::get();
  31.         $seed APPLICATION_NAME . ( !empty($ini['general']['seed']) ? $ini['general']['seed'] : 's8dkld83kf73kf094' );
  32.         $hash md5("{$seed}{$param['database']}{$param['key']}{$param['column']}{$param['model']}");
  33.         $mask $param['mask'];
  34.         
  35.         if ($hash == $param['hash'])
  36.         {
  37.             try
  38.             {
  39.                 TTransaction::open($param['database']);
  40.                 $info TTransaction::getDatabaseInfo();
  41.                 $default_op $info['type'] == 'pgsql' 'ilike' 'like';
  42.                 $operator   = !empty($param['operator']) ? $param['operator'] : $default_op;
  43.                 
  44.                 $repository = new TRepository($param['model']);
  45.                 $criteria = new TCriteria;
  46.                 if ($param['criteria'])
  47.                 {
  48.                     $criteria unserializebase64_decode(str_replace(array('-''_'), array('+''/'), $param['criteria'])) );
  49.                 }
  50.     
  51.                 $columns explode(','$param['column']);
  52.                 
  53.                 if (!isset($param['value']))
  54.                 {
  55.                     $param['value'] = '';
  56.                 }
  57.                 
  58.                 if ($columns)
  59.                 {
  60.                     $dynamic_criteria = new TCriteria;
  61.                     
  62.                     if (empty($param['onlyidsearch']))
  63.                     {
  64.                         foreach ($columns as $column)
  65.                         {
  66.                             if (stristr(strtolower($operator),'like') !== FALSE)
  67.                             {
  68.                                 $param['value'] = str_replace(' ''%'$param['value']);
  69.                                 $filter = new TFilter($column$operator"{$param['value']}%");
  70.                             }
  71.                             else
  72.                             {
  73.                                 $filter = new TFilter($column$operator$param['value']);
  74.                             }
  75.         
  76.                             $dynamic_criteria->add($filterTExpression::OR_OPERATOR);
  77.                         }
  78.                     }
  79.                     
  80.                     $id_search_value = (!empty($param['idtextsearch']) && $param['idtextsearch'] == '1') ? $param['value'] : (int) $param['value'];
  81.                     
  82.                     if ($param['idsearch'] == '1' and !empty( $id_search_value ))
  83.                     {
  84.                         $dynamic_criteria->add( new TFilter($key'='$id_search_value), TExpression::OR_OPERATOR);
  85.                     }
  86.                 }
  87.                 
  88.                 if (!$dynamic_criteria->isEmpty())
  89.                 {
  90.                     $criteria->add($dynamic_criteriaTExpression::AND_OPERATOR);
  91.                 }
  92.                 $criteria->setProperty('order'$param['orderColumn']);
  93.                 $criteria->setProperty('limit'1000);
  94.                 
  95.                 $items = array();
  96.                 
  97.                 if (!empty($param['value']) || $param['minlength'] == '0')
  98.                 {
  99.                     $collection $repository->load($criteriaFALSE);
  100.                     
  101.                     foreach ($collection as $object)
  102.                     {
  103.                         $k $object->$key;
  104.                         $maskvalues $mask;
  105.                         
  106.                         $maskvalues $object->render($maskvalues);
  107.                         
  108.                         // replace methods
  109.                         $methods get_class_methods($object);
  110.                         if ($methods)
  111.                         {
  112.                             foreach ($methods as $method)
  113.                             {
  114.                                 if (stristr($maskvalues"{$method}()") !== FALSE)
  115.                                 {
  116.                                     $maskvalues str_replace('{'.$method.'()}'$object->$method(), $maskvalues);
  117.                                 }
  118.                             }
  119.                         }
  120.                         
  121.                         $c $maskvalues;
  122.                         if ( $k != null && $c != null )
  123.                         {
  124.                             $c AdiantiStringConversion::assureUnicode($c);
  125.                             
  126.                             if (!empty($k) && !empty($c))
  127.                             {
  128.                                 $items[] = "{$k}::{$c}";
  129.                             }
  130.                         }
  131.                     }
  132.                 }
  133.                 
  134.                 $ret = array();
  135.                 $ret['result'] = $items;
  136.                 echo json_encode($ret);
  137.                 TTransaction::close();
  138.             }
  139.             catch (Exception $e)
  140.             {
  141.                 $ret = array();
  142.                 $ret['result'] = array("1::".$e->getMessage());
  143.                 
  144.                 echo json_encode($ret);
  145.             }
  146.         }
  147.     }
  148. }
  149. ?>