我正在运行此查询
$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 = 替换(full_dir_url, '/1st Year/Slide', '/1st Year/Slides') 其中 full_dir_url 如 '/1st Year/Slide/%' 或 full_dir_url = '/1st Year/Slide'
当我在 phpmyadmin sql 编辑器中运行此查询时,数据会按预期更新。
但是
DB::raw($query)
不会更新任何数据。也没有错误日志。
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);
您正在尝试使用 Laravel 的 `` 执行原始 SQL 更新查询,但它似乎没有更新任何数据,即使该查询在 phpMyAdmin 中运行良好。以下是解决此问题的一些见解和解决方案:
问题分析:
DB::raw()
方法主要用于查询中的原始表达式,但它本身并不执行查询。要执行原始查询,您需要使用 DB::statement()
或 DB::update()
。DB::raw($query)
不会运行查询;它只是准备在查询构建器上下文中使用。解决方案: 要正确执行更新查询,您可以使用以下方法:
$query = "UPDATE my_cloud SET full_dir_url = REPLACE(full_dir_url, '$findWhat', '$replaceWith')
WHERE full_dir_url LIKE '$findWhat/%' OR full_dir_url = '$findWhat'";
// Execute the update query
DB::update($query);
要点:
DB::raw()
:用于查询中的原始表达式,而不是用于执行它们。DB::update()
:正确执行SQL更新
声明。回答我自己的问题:
问题 1:
DB::raw
不应该像 Renée 所说的那样工作。 DB::statement
或DB::update
都对我有用。
问题2
or where full_dir_url='$findWhat'
- 这个条款是错误的。我从 where
中删除了 or where
,效果很好。