我有一个使用MySQL的网站(Laravel& AngularJS)。 现在我正在尝试更改为Postgres,数据库已创建并可访问(所有列均为小写,我无法更改,因为有另一个应用程序共享数据库)。 问题是Laravel的Illuminate正在创建带有引号的数据库查询,如下所示:
DB::table('generalsettings')->where('settingsKey', '=', 'LicenseSerial');
这会创建:SELECT * FROM“generalsettings”WHERE“settingsKey”='LicenseSerial'
由于列的键小写,这不起作用。 无论如何配置Illuminate的数据库不向列键添加引号?
答案 0 :(得分:0)
不,在应用程序级别没有配置值或任何东西来控制它。最好的办法是只知道列名称区分大小写,并确保正确编写查询。
还有另外两种选择,但它们并不漂亮。
首先,Laravel不会包装表达式,因此以下方法可行:
DB::table('generalsettings')->where(DB::raw('settingsKey'), '=', 'LicenseSerial');
当然,这意味着您必须通过调用DB::raw()
来包装您指定的每个列名。
第二个选项是在查询构建器中扩展和覆盖文件以停止转义列。这将是很多工作,非常容易出错。我不会详细介绍,但您最终必须至少覆盖PostgresGrammar
,Grammar
和PostgresConnection
,然后将它们连接在一起服务提供商。