【发布时间】:2021-01-29 15:13:46
【问题描述】:
我试图让laravel 7x 与cloudera 提供的impala/kudu 一起工作。我得到了ODBC connection,它连接良好,如果您运行原始 sql 查询,它也可以正常工作。
数据库连接入口:
'impala_connect' => [
'driver' => 'sqlsrv',
'odbc' => true,
'odbc_datasource_name'=> 'cloudera_odbc_connection',
'host' => '',
'port' => '',
'database' => '',
'username' => '',
'password' => '',
'pooling' => false,
],
原始查询工作正常:
DB::connection('impala_connect')->raw("insert into test1 values(4, 'z')");
DB::connection('impala_connect')->select(DB::raw('select * from test1'));
查询生成器失败:
但是,当我使用 laravel 的查询构建器运行一些查询时,它们都失败了,并带有 laravel 自己添加的括号。
DB::connection('impala_connect')->table('test1')->get(['id', 'val']);
//or
DB::connection('impala_connect')->table('test1')->insert([
'id'=> 5,
'val'=> 'z'
]);
这是我得到的错误:
SQLSTATE: General error: 0 [Cloudera][ImpalaODBC] (110) Error while executing a query in Impala : ParseException: Syntax error in line 1: select [id], [val] from [test1] ^
Encountered: COMMA Expected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, LEFT, NOT, NULL, REPLACE, RIGHT, TRUNCATE, TRUE, IDENTIFIER
CAUSED BY: Exception: Syntax error (SQLPrepare[0] at pdo_odbc\odbc_driver.c:206) (SQL: select [id], [val] from [test1])
您可以看到实际查询变成了每个项目的括号,这就是它失败的地方。
那么你如何让 laravel 不包裹括号?!
编辑:
我确实想出了如何获得至少不带括号的表名。
->table(db::raw('test1'))->
但是,我无法获取 insert 和 update 中的列名。
【问题讨论】:
标签: laravel odbc laravel-7 impala laravel-query-builder