Laravel(5.1)查询生成器没有正确地向原始select语句添加绑定


Laravel (5.1) query builder does not properly add bindings to a raw select statement

我使用的是Laravel 5.1,并有以下简单查询:

$searchTerm = 'random word';
$subQuery = DB::table('userprofile')->selectRaw("
    user_id,
    MATCH(first_name, last_name) AGAINST('?*' IN BOOLEAN MODE) AS search_score
")
->addBinding($searchTerm)
->get();

这不会返回任何,但当我直接用替换引号时

... AGAINST('$searchTerm*' IN BOOLEAN MODE) ...

那么结果是正确的。但是,如果我做

DB::getQueryLog();

我得到

"query" => "select `user_id`, MATCH(first_name, last_name) AGAINST('?*' IN BOOLEAN MODE) AS search_score from `userprofile`"
"bindings" => array:1 [
  0 => "random word"
]

因此,似乎应该添加绑定,但事实并非如此。我已经尝试了其他地方建议的select、selectRaw、->setBindings、->addBinding($searchTerm、['select'])等的所有变体。如何使这些绑定工作?

你试过这样替换整个正则表达式吗?

$searchTerm = 'random word*';
$subQuery = DB::table('userprofile')->selectRaw("
    user_id,
    MATCH(first_name, last_name) AGAINST(? IN BOOLEAN MODE) AS search_score
")
->addBinding($searchTerm)
->get();

这样,如果拉拉威尔加上这些额外的引号,可能就不会加上它们了。