【发布时间】:2016-11-08 13:15:36
【问题描述】:
我正在使用 Laravel 5.2,我正在尝试使用 laravel eloquent 执行 sql 查询。
但是 Oracle 不理解 laravel 查询。
这是 Laravel 代码:
public function postLogincheck(Request $request){
$rules = array(
'name' => 'required|min:3',
'password' => 'required|alphaNum|min:3'
);
$messages = array(
'required'=>':attribute alanı gereklidir.',
'min'=>':attribute alanına en az :min karakter girmelisiniz',
'alphaNum'=>':attribute alanına alfanümerik karakterler girebilirsiniz'
);
$validator = Validator::make(Input::all(), $rules,$messages);
if ($validator->fails()) {
return Redirect::to('login')
->withErrors($validator)
->withInput(Input::except('password'));
} else {
if (Auth::attempt(array('name' => $request->name, 'password' => $request->password))) {
flash()->success('Giriş başarılı');
return Redirect::to('/');
}
flash()->error('Giriş başarısız');
return Redirect::to('/login');
}
}
此方法检查用户是否登录。而 laravel 转换登录查询如下:
select * from (select * from ReportUsers where upper(name) = upper(tsim)) where rownum = 1
但是 oracle 期待这个查询:
select * from (select * from "ReportUsers" where upper("name") = upper('tsim')) where rownum = 1
我使用yajra laravel-oci8 connector 连接Oracle DB。
我也收到了这个问题的错误原因:
Error Code : 942
Error Message : ORA-00942: tablo veya görüntü mevcut degil
Position : 29
Statement : select * from (select * from ReportUsers where upper(name) = upper(:p0)) where rownum = 1
Bindings : [tsim,tsim]
(SQL: select * from (select * from ReportUsers where upper(name) = upper(tsim)) where rownum = 1)
我该如何解决这个问题?
谢谢
【问题讨论】:
-
你确定吗? SQL 非常标准化,我不再使用 Oracle,但我不记得引用表或列名。你的错误信息是什么?
-
@Devon 如果将表/列名称定义为区分大小写,则必须用双引号引起来。一般来说,这是一个完整的 PITA 恕我直言!
-
@Devon 是的,我确定。我编辑了问题以查看错误消息。
-
如果可能重命名表,使其名称不区分大小写:
rename "ReportUsers" to reportusers; -
@Boneist,是的,那是一个 PITA。我想我一直使用snake_case 约定。