2016-11-08 119 views
1

我正在使用Laravel 5.2,我试图用laravel雄辩来执行sql查询。Oracle不理解Laravel的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'); 
    } 

} 

这种方法检查login.And用户laravel转换登录查询是这样的:

select * from (select * from ReportUsers where upper(name) = upper(tsim)) where rownum = 1 

但甲骨文预计此查询:

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) 

我怎样才能得到这个问题?

感谢

+0

你确定? SQL非常标准化,我不再和Oracle一起工作,但我永远不会记得引用表或列的名称。你的错误信息是什么? – Devon

+2

@Devon如果将表/列名称定义为区分大小写,则必须重新引用它们。一般来说,这是一个完整的PITA! – Boneist

+0

@Devon是的,我确定。我编辑了这个问题以查看错误消息。 – kodcu

回答

0

只是将这里走出去的肢体,因为我没有马上测试它的任何方式。

尝试增加:

protected $table = '"ReportUsers"'; 

到模型。

如果它不起作用,我会删除它。

+0

问题不仅在于表格名称格式,而且还有表格属性格式。像'name'应该是“名称”。 – kodcu

+0

从评论看来,这只是大写字母的情况。你是否尝试过并确认? – Devon

0

我遇到了同样的问题,只是对将要解决的OracleGrammar.php文件的第206行进行评论,它会测试它是否为带有大写名称的保留字。

// $ value = $ this-> isReserved($ value)? Str :: lower($ value):Str :: upper($ value);

文件路径是于供应商> yajra-> laravel-oci8-> SRC-> Oci8->查询 - >文法