Eloquent Raw使用like条件查询

时间:2014-02-22 10:07:32

标签: laravel-4 eloquent

我正在使用这个Eloquent原始查询来获取一些结合了标题和标签列的搜索结果。我的代码就像这样

$term="Test";
$clips=  \Clip::whereRaw("caption like '%?%' OR tags like '%?%' ", array($term,$term))->get();
dd($clips);

但使用此我无法获得结果,因为转储显示没有结果,使用下面的代码我可以得到结果:

$term="Test";
$clips=  \Clip::whereRaw("caption like '%$term%' OR tags like '%$term%' ")->get();
dd($clips);

和dump显示预期的所有5个结果。我在第一种情况下做错了什么。

1 个答案:

答案 0 :(得分:12)

如果你使用预备语句,你应该使用?没有别的。如果您自己添加引号,则不应使用预准备语句。因此,让准备好的语句处理引号并将%-sign添加到要插入预准备语句的变量中。

$term="Test";
$clips=  \Clip::whereRaw("caption like ? OR tags like ? ", array('%'.$term.'%','%'.$term.'%'))->get();
dd($clips);

顺便说一下,你也可以在没有原始的地方做到这一点..

$term="Test";
$clips=\Clip::where("caption","like","%".$term."%")->orWhere("tags","like","%".$term."%")->get();
dd($clips);

...我个人甚至更愿意使用scope来做这些事情。