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%'


Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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. if ($hash == $param['hash'])
  35. {
  36. try
  37. {
  38. TTransaction::open($param['database']);
  39. $info = TTransaction::getDatabaseInfo();
  40. $default_op = $info['type'] == 'pgsql' ? 'ilike' : 'like';
  41. $operator = !empty($param['operator']) ? $param['operator'] : $default_op;
  42. $repository = new TRepository($param['model']);
  43. $criteria = new TCriteria;
  44. if ($param['criteria'])
  45. {
  46. $criteria = unserialize( base64_decode(str_replace(array('-', '_'), array('+', '/'), $param['criteria'])) );
  47. }
  48. $columns = explode(',', $param['column']);
  49. if (!isset($param['value']))
  50. {
  51. $param['value'] = '';
  52. }
  53. if ($columns)
  54. {
  55. $dynamic_criteria = new TCriteria;
  56. if (empty($param['onlyidsearch']))
  57. {
  58. foreach ($columns as $column)
  59. {
  60. if (stristr(strtolower($operator),'like') !== FALSE)
  61. {
  62. $param['value'] = str_replace(' ', '%', $param['value']);
  63. $filter = new TFilter($column, $operator, "{$param['value']}%");
  64. }
  65. else
  66. {
  67. $filter = new TFilter($column, $operator, $param['value']);
  68. }
  69. $dynamic_criteria->add($filter, TExpression::OR_OPERATOR);
  70. }
  71. }
  72. $id_search_value = (!empty($param['idtextsearch']) && $param['idtextsearch'] == '1') ? $param['value'] : (int) $param['value'];
  73. if ($param['idsearch'] == '1' and !empty( $id_search_value ))
  74. {
  75. $dynamic_criteria->add( new TFilter($key, '=', $id_search_value), TExpression::OR_OPERATOR);
  76. }
  77. }
  78. if (!$dynamic_criteria->isEmpty())
  79. {
  80. $criteria->add($dynamic_criteria, TExpression::AND_OPERATOR);
  81. }
  82. $criteria->setProperty('order', $param['orderColumn']);
  83. $criteria->setProperty('limit', 1000);
  84. $items = array();
  85. if (!empty($param['value']) || $param['minlength'] == '0')
  86. {
  87. $collection = $repository->load($criteria, FALSE);
  88. foreach ($collection as $object)
  89. {
  90. $k = $object->$key;
  91. $maskvalues = $mask;
  92. $maskvalues = $object->render($maskvalues);
  93. // replace methods
  94. $methods = get_class_methods($object);
  95. if ($methods)
  96. {
  97. foreach ($methods as $method)
  98. {
  99. if (stristr($maskvalues, "{$method}()") !== FALSE)
  100. {
  101. $maskvalues = str_replace('{'.$method.'()}', $object->$method(), $maskvalues);
  102. }
  103. }
  104. }
  105. $c = $maskvalues;
  106. if ( $k != null && $c != null )
  107. {
  108. $c = AdiantiStringConversion::assureUnicode($c);
  109. if (!empty($k) && !empty($c))
  110. {
  111. $items[] = "{$k}::{$c}";
  112. }
  113. }
  114. }
  115. }
  116. $ret = array();
  117. $ret['result'] = $items;
  118. echo json_encode($ret);
  119. TTransaction::close();
  120. }
  121. catch (Exception $e)
  122. {
  123. $ret = array();
  124. $ret['result'] = array("1::".$e->getMessage());
  125. echo json_encode($ret);
  126. }
  127. }
  128. }
  129. }
  130. ?>