Ecstore过滤参数的搜索方式 – 千丝海阁

首页 » Ecstore » Ecstore过滤参数的搜索方式

Ecstore过滤参数的搜索方式

2559 0

今天群里有人提问filter参数写成array(‘bn’=>’1333333’)为什么会返回带有bn=13333332522这样的数据,很明显,这个不是精确匹配,而是模糊前缀匹配了。同样用array(‘goods_id’=>’123’)却不会返回goods_id为1234的数据,这是为什么呢?

这是因为dbscheme表中的searchtype字段影响的,打开goods表结构文件,关于bn的字段定义如下,

'bn' =>
    array (
      'type' => 'varchar(200)',
      'label' => app::get('b2c')->_('商品编号'),
      'width' => 110,
      'searchtype' => 'head',
      'editable' => true,
      'filtertype' => 'yes',
      'filterdefault' => true,
      'in_list' => true,
    ),

其中searchtype为head,再打开/app/dbeav/lib/filter.php,其中有定义searchtype可用类型,

$FilterArray= array('than'=>' > '.$var,
                            'lthan'=>' < '.$var,
                            'nequal'=>' = \''.$var.'\'',
                            'noequal'=>' <> \''.$var.'\'',
                            'tequal'=>' = \''.$var.'\'',
                            'sthan'=>' <= '.$var,
                            'bthan'=>' >= '.$var,
                            'has'=>' like \'%'.$var.'%\'',
                            'head'=>' like \''.$var.'%\'',
                            'foot'=>' like \'%'.$var.'\'',
                            'nohas'=>' not like \'%'.$var.'%\'',
                            'between'=>' {field}>='.$var[0].' and '.' {field}<='.$var[1],
                            'in' =>" in ('".implode("','",(array)$var)."') ",
                            'notin' =>" not in ('".implode("','",(array)$var)."') ",
                            );

可以明显的看到这里的head是like前缀查询的意思,所以bn搜索栏里搜索的1333333,自然会把13333332522也一并返回了。

文章评分1次,平均分5.0

本文原始地址:https://www.tiandiyoyo.com/2016/06/how_to_use_searchtype_of_dbscheme/
本站所有文章,除了特别注明外,均为本站原创,转载请注明出处来自www.tiandiyoyo.com

您可能还会对以下文章感兴趣:

评论前先开启评论开关: