我正在使用这个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个结果。我在第一种情况下做错了什么。
答案 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来做这些事情。