Laravel使用Like运算符和'%'为原始查询添加参数

时间:2017-07-28 02:20:11

标签: mysql laravel

我做了一些分配参数的方法,但它不起作用

这是我的代码:

$sqlDefault = "Select * from histories as h where h.status like % :status %";

return DB::select(DB::raw($sqlDefault), ['status' => $status]);

它没有用,所以我尝试了另一种分配方式:

'%:status%''%':status'%'

但这不起作用

现在我不使用参数,它完美地工作

$sqlDefault = "Select * from histories as h where h.status like '%$status%'";

问题是如何在使用带有“%”的运算符时使用参数?

4 个答案:

答案 0 :(得分:4)

$status替换为'%'.$status.'%'

$sqlDefault = "Select * from histories as h where h.status like  :status ";

return DB::select(DB::raw($sqlDefault,['status' => '%'.$status.'%']));

或仅使用select:

return  = DB::select(sqlDefault , ['status' => '%'.$status.'%']);

答案 1 :(得分:3)

预备声明的占位符在'%...%'内不起作用,因为它后来被视为string值而不是placeholder。您需要直接放置占位符,然后传递包含"%{$variable}%"的值。

试试这个

$sql = "SELECT * FROM `histories` AS h WHERE `h`.`status` LIKE :status";

return DB::select($sql, [ 'status' => "%{$status}%" ]);

答案 2 :(得分:0)

如果要查看运行的查询,可以使用dd(DB::getQueryLog())

试试这个:

$result = DB::table('histories')->where('status', 'like', '%' . $status . '%')->get();

答案 3 :(得分:0)

尝试此操作而不指定参数

DB::table('histories')
  ->where('status' , 'like', '%'. $status .%' )
  ->get();

或者你可以像这样使用直接历史app类

在顶部添加use App/Histories;

并使用这样的查询

Histories::where('status' , 'like', '%'. $status .%' )->get();