带引号的{laravel db postgresql列

时间:2017-03-10 14:50:17

标签: php postgresql laravel

我有一个使用MySQL的网站(Laravel& AngularJS)。 现在我正在尝试更改为Postgres,数据库已创建并可访问(所有列均为小写,我无法更改,因为有另一个应用程序共享数据库)。 问题是Laravel的Illuminate正在创建带有引号的数据库查询,如下所示:

DB::table('generalsettings')->where('settingsKey', '=', 'LicenseSerial');

这会创建:SELECT * FROM“generalsettings”WHERE“settingsKey”='LicenseSerial'

由于列的键小写,这不起作用。 无论如何配置Illuminate的数据库不向列键添加引号?

1 个答案:

答案 0 :(得分:0)

不,在应用程序级别没有配置值或任何东西来控制它。最好的办法是只知道列名称区分大小写,并确保正确编写查询。

还有另外两种选择,但它们并不漂亮。

首先,Laravel不会包装表达式,因此以下方法可行:

DB::table('generalsettings')->where(DB::raw('settingsKey'), '=', 'LicenseSerial');

当然,这意味着您必须通过调用DB::raw()来包装您指定的每个列名。

第二个选项是在查询构建器中扩展和覆盖文件以停止转义列。这将是很多工作,非常容易出错。我不会详细介绍,但您最终必须至少覆盖PostgresGrammarGrammarPostgresConnection,然后将它们连接在一起服务提供商。