TP5 like模糊查询

$rs=Db::name('school')->where($type,'like',"%{$key}%")->order('id desc')->limit($limit)->page($page)->select();

出处:http://blog.csdn.net/chengxiadenghuo/article/details/77160105



一、TP5.1版本

		if($sotitle){

            if($sotype=="id"){
            	$where[$sotype] = $sotitle;	

			}else{
				$where = [
				        ['title', 'like', "%".$sotitle."%"],
				    ];
			}

		}
		$where['level'] = 1;

$rs1=Db::name('column')-> where($where)->select();

注意,V5.1.7+版本数组方式如果使用exp查询的话,一定要用raw方法。

Db::table('think_user')
    ->where([
        ['name', 'like', 'thinkphp%'],
        ['title', 'like', '%thinkphp'],
        ['id', 'exp', Db::raw('>score')],
        ['status', '=', 1],
    ])
    ->select();

数组查询方式,确保你的查询数组不能被用户提交数据控制,用户提交的表单数据应该是作为查询数组的一个元素传入,如下:

Db::table('think_user')
    ->where([
        ['name', 'like', $name . '%'],
        ['title', 'like', '%' . $title],
        ['id', '>', $id],
        ['status', '=', $status],
    ])
    ->select();

注意,相同的字段的多次查询条件可能会合并,如果希望某一个where方法里面的条件单独处理,可以使用下面的方式,避免被其它条件影响。

$map = [
        ['name', 'like', 'thinkphp%'],
        ['title', 'like', '%thinkphp'],
        ['id', '>', 0],
    ];
Db::table('think_user')
    ->where([ $map ])
    ->where('status',1)
    ->select();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) AND `status` = '1'

如果使用下面的多个条件组合

$map1 = [
        ['name', 'like', 'thinkphp%'],
        ['title', 'like', '%thinkphp'],
    ];
    
$map2 = [
        ['name', 'like', 'kancloud%'],
        ['title', 'like', '%kancloud'],
    ];    
    
Db::table('think_user')
    ->whereOr([ $map1, $map2 ])
    ->select();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' ) OR ( `name` LIKE 'kancloud%' AND `title` LIKE '%kancloud' )

善用多维数组查询,可以很方便的拼装出各种复杂的SQL语句


引用:https://www.kancloud.cn/manual/thinkphp5_1/354030


你可能感兴趣的:(thinkphp5)