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

问题描述 投票:0回答:3

我正在运行此查询

$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)
不会更新任何数据。也没有错误日志。

php mysql laravel-5
3个回答
3
投票

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
投票

您正在尝试使用 Laravel 的 `` 执行原始 SQL 更新查询,但它似乎没有更新任何数据,即使该查询在 phpMyAdmin 中运行良好。以下是解决此问题的一些见解和解决方案:

问题分析

  1. 错误使用 DB::raw()
    DB::raw()
    方法主要用于查询中的原始表达式,但它本身并不执行查询。要执行原始查询,您需要使用
    DB::statement()
    DB::update()
  2. 查询执行: 确保查询正确执行。仅调用
    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
投票

回答我自己的问题:

问题 1:

DB::raw
不应该像 Renée 所说的那样工作。
DB::statement
DB::update
都对我有用。

问题2

or where full_dir_url='$findWhat'
- 这个条款是错误的。我从
where
中删除了
or where
,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.