首页 > 解决方案 > AS400 上的 Laravel 8 使用带点的 ODBC 表名

问题描述

我在一个项目中,我需要从包含“。”的表中检索信息。以它的名字...我的查询如下所示:

$data['scale'] = DB::connection('odbc')
->table('QS36F."CF.STYL1"')
->select('SSCALE','SINTDE')
->where('STYLE#', 'LIKE', $style.'%')
->get();

显然上述方法不起作用并返回

SQLSTATE[42000]:语法错误或访问冲突:[IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0113 - 名称“”“CF”不允许。(SQLPrepare[0] at /home/calvin/rpmbuild/BUILD/php-8.0.8/ext/pdo_odbc/odbc_driver.c:203) (SQL: select "SSCALE", "SINTDE" from "QS36F".""" CF"."STYL1""" where "STYLE#" LIKE 1981USD%)

我可能可以使用完整的原始查询使其工作,但如果无论如何可以使用普通的雄辩函数使其工作,我肯定更喜欢使用 table() select() where() get() 等......

有什么建议么?

标签: phpdb2odbclaravel-8

解决方案


好的,所以我使用 DB::raw() 解决了这个问题,如下所示:

$data['scale'] = DB::connection('odbc')
->table(DB::raw('QS36F."CF.STYL1"'))
->select('SSCALE','SINTDE')
->where('STYLE#', 'LIKE', $style.'%')
->get();

至少这样我没有使用完整的原始查询。我希望这将有助于下一个需要处理包含点的表名的人哈哈


推荐阅读