Laravel DB :: raw()不执行查询但手动执行有效

时间:2017-10-01 09:57:02

标签: php mysql laravel-5

我正在运行此查询

$query = "update my_cloud set full_dir_url = replace(full_dir_url, '$findWhat', '$replaceWith') where full_dir_url like '$findWhat/%' or where full_dir_url = '$findWhat' ";
DB::raw($query);
echo $query;

echo $query的输出

  

更新my_cloud set full_dir_url = replace(full_dir_url,'/ 1st year / Slide','/ 1st Year / Slides')full_dir_url like'/ 1st Year / Slide /%'或full_dir_url ='/ 1st year / Slide '

当我在phpmyadmin sql编辑器中运行此查询时,数据会按预期更新。

但是DB::raw($query)不会更新任何数据。也没有错误日志。

2 个答案:

答案 0 :(得分:1)

DB::raw没有运行查询,它将字符串包装在一个对象中,以便Laravel知道它不应该转义内容。

相反,您可以使用DB::update功能:

$query = "update my_cloud set full_dir_url = replace(full_dir_url, '$findWhat', '$replaceWith') where full_dir_url like '$findWhat/%' or where full_dir_url = '$findWhat' ";
DB::update(query);

答案 1 :(得分:0)

回答我自己的问题:

问题1: DB::raw不应该像Renée所说的那样有效。 DB::statementDB::update都为我工作。

问题2 or where full_dir_url='$findWhat' - 这个条款错了。我从where中删除了or where,但是有效。