今天群里有人提问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:★★★★★