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