Laravel:toSql函数未正确显示查询

7 浏览
0 Comments

Laravel:toSql函数未正确显示查询

我试图使用以下代码在我的索引屏幕上显示查询结果:

dd(DB::table('members')->where('name', '=', 'Tycho')->toSql());

现在的问题是,当我在屏幕上显示查询结果时,我得到的是:

"select * from `members` where `name` = ?"

我的最终目标是,我可以保存离线查询,并在应用程序在线时执行它们。除非有人有解决办法,否则我将不得不将查询保存在数据库中。

0
0 Comments

问题:Laravel的toSql函数未正确显示查询语句。

原因:toSql函数在Laravel中用于将查询对象转换为原始的SQL查询语句。然而,有时候使用该函数时,查询语句未正确显示。

解决方法:可以尝试以下方法来解决该问题:

1. 使用DB::enableQueryLog()开启查询日志功能。

2. 使用DB::table('members')->where('name', '=', 'Tycho')->get()执行查询操作。

3. 使用print_r(DB::getQueryLog())打印查询日志。

4. 使用echo "

"将查询日志以可读的方式显示出来。

这样,就可以正确显示查询语句了。

0
0 Comments

Laravel的toSql函数在显示查询时,可能无法正确显示查询语句的问题出现的原因是使用了toSql方法,可以使用getBindings方法来获取值/绑定。

解决方法是使用以下一行代码:

$query = DB::table('members')->where('name', '=', 'Tycho')->toSql();
$sqlWithBindings = str_replace_array('?', $query->getBindings(), $query->toSql());

以上代码将会返回带有绑定的原始查询语句。

0
0 Comments

问题原因:Laravel使用了预处理语句,所以在toSql函数返回的查询语句中出现了"?"占位符。

解决方法:在Eloquent构建器上添加一个toRawSql()宏,该宏将使用原始查询中提供的绑定值替换占位符。

在使用Laravel的toSql函数时,你可能会遇到查询语句显示不正确的问题,查询语句中出现了"?"占位符。这是因为Laravel使用了预处理语句。

为了解决这个问题,我们可以参考Ijas Ameenudeen在另一个Stack Overflow问题上的回答。他详细介绍了如何在Eloquent构建器上添加一个toRawSql()宏,该宏将替换占位符为原始查询中提供的绑定值。

具体实现步骤如下:

1. 打开你的Laravel项目,并找到Eloquent模型所在的目录。

2. 在该目录下的一个合适的位置创建一个新的文件,例如"Macros.php"。

3. 在该文件中,添加以下代码:

getBindings(), function ($sql, $binding) {
        return preg_replace('/\?/', is_numeric($binding) ? $binding : "'" . $binding . "'", $sql, 1);
    }, $this->toSql());
});

4. 保存并关闭文件。

5. 打开"Laravel\Providers\AppServiceProvider.php"文件,该文件位于"app\Providers"目录下。

6. 在该文件中的"register"方法中添加以下代码:

public function register()
{
    require_once __DIR__.'/../Macros.php';
}

7. 保存并关闭文件。

8. 在命令行中运行以下命令重启Laravel服务:

php artisan serve

现在,你可以在你的代码中使用toRawSql()函数来替代toSql()函数,这样查询语句就会正确显示绑定的值了。

希望这篇文章对解决"Laravel: toSql function not displaying query correctly"这个问题有所帮助。如果你还有其他问题,可以查阅Ijas Ameenudeen在Stack Overflow上的回答,他对这个问题进行了详细的解释。

0