IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ecstore过滤参数的搜索方式

    tiandi发表于 2016-06-20 05:31:14
    love 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:★★★★★


沪ICP备19023445号-2号
友情链接