2012-12-20 9 views
3

아주 간단하지만 어떤 예제도 찾을 수 없습니다.Laravel의 유창한 쿼리 빌더와 원시 SQL과 non-raw를 섞는 방법

내 Laravel 응용 프로그램을 유창하게 사용하여 사용자의 로그인을 기록하고 자체 인증 드라이버를 만들었지 만 원시 데이터와 원시를 혼합 한 유창한 쿼리에 문제가 있습니다. 다음을 살펴보십시오. :

DB::table('logins')->insert(array(
    'login_email' => $arguments['email'], 
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'), 
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'), 
    'login_result' => (bool)$success 
)); 

가 일으키는 :

DB::table('logins')->insert(array(
    'login_email' => DB::raw("'".$arguments['email']."'"), 
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'), 
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'), 
'login_result' => DB::raw((bool)$success) 
)); 
:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?)' at line 1 

SQL: INSERT INTO `cs_logins` (`login_email`, `login_date`, `login_ip`, `login_result`) VALUES (?, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?) 

Bindings: array (
    0 => false, 
) 

그래서 나는 다음과 같은 한

그러나 Dayle Rees가 말했듯이, 추한 것처럼 보이면 프레임 워크에 없기 때문에 여기에서 누락 된 부분을 알고 싶습니다.

답변

3

모든 이용 웅변

첫째, 이미 수행하지 않을 경우, 로그인에 대한 모델을 만들 수 있습니다. Eloquent를 사용하면 단순하면서도 강력한 쿼리를 매우 표현적인 방식으로 작성할 수 있습니다. 귀하의 경우 아마도 더 우아한,

$logins = Login::create(array('email' => '[email protected]')); 

또는 :

지금 당신은이 두 가지 옵션 중 하나를 수행 할 수 있습니다

$login = new Login; 

$login->email = '[email protected]'; 
$login->login_date = DB::raw('UNIX_TIMESTAMP(NOW())'); 

$login->save(); 

자세한 내용은 eloquent docs를 참조하십시오.

+0

정보가 +1 tnx 인 경우 Dayle Rees의 튜토리얼을 구입하여 읽었으며 Fluent가 더 쉽게 시작했다고 판단했기 때문에 주로 Fluent 예제를 사용하고 피벗 테이블을 사용하는 방법을 쉽게 보여 주었기 때문에 생각했습니다. 당신은 웅변이가는 길이라고 생각합니까? 많은 사람들이 여러 조인을 사용하여 여러 테이블을 쉽게 검색, 업데이트, 삭제할 수있는 쉬운 구문을 사용하고 있습니까? – Neo

+0

btw 내 라이브러리 폴더에 인증 드라이버를 만들었습니다. 라이브러리에서 로그인 모델에 액세스하려면 어떻게해야합니까? 로그인 모델은 로그인이고 Eloquent를 확장합니다. – Neo

+1

Eloquent는 확실히가는 길입니다. 그것은 모든 작업을위한 동일하고 쉬운 synthax 있습니다. 대부분의 운영은 유창합니다. 'User :: where_name ('simon') -> order_by ('last_name') -> get()'은 웅변을 사용하여 데이터를 검색하는 방법입니다. 유일한 차이점은'User ::'입니다. 그렇지 않으면 꽤 유사 해 보입니다. 맞습니까? :) 자세한 정보는 문서를 확인하십시오. 배우기는 쉽습니다. – aebersold

0

좋습니다. "?" 물음표는 유창한 것이 준비된 진술을 만드는 부분에 있지 않았다는 것을 의미했습니다. 나는 Laravel과 Fluent에 익숙하지 않고 물음표가 오류가 쿼리의 해당 부분에 있다는 것을 의미한다고 생각했습니다. 당신이 laravel 자신의 ORM 웅변을 사용할 수 있도록

+0

맞습니다. 물음표는 param이 누락되거나 잘못되었음을 의미합니다. 질문이 해결 되었습니까? – aebersold