Eloquent Raw使用like条件查询

man*_*ish 4 eloquent laravel-4

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

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

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

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

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

Bra*_*ram 14

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

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

顺便说一句,你也可以这样做,没有原始的..

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

...而且我个人甚至更愿意使用范围来做这些事情.