2012-12-20 32 views
3

我確定它非常簡單,但我找不到任何示例。如何使用Laravel的流利的查詢生成器混合原始SQL和非原始數據

我在我的Laravel應用程序中使用流暢的功能來記錄我的用戶登錄,所以我創建了自己的auth驅動程序,但是我遇到了混合原始數據而沒有原始數據的流暢查詢的問題,請看以下內容:

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 
)); 

這會導致:

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, 
) 

,所以我做了以下內容:

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) 
)); 

但是,正如Dayle Rees所說,如果它看起來很醜,它不在框架中......所以我想知道我在這裏失去了什麼。

回答

3

使用雄辯

首先,如果尚未完成,建立一個模型登錄,所以你可以使用laravel自己的ORM 雄辯。雄辯使您能夠以非常富有表現力的方式編寫簡單但功能強大的查詢。

現在你可以做的這兩個選項之一:

$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似乎更容易開始,我認爲主要是因爲他使用了更多的流利的例子,並且還顯示了他們如何輕鬆地使用數據透視表。你認爲雄辯是要走的路嗎?雄辯有相同的簡單語法來輕鬆地檢索,更新和刪除多個連接的多個表? – Neo

+0

btw我在我的庫文件夾中創建了一個auth驅動程序如何從庫中訪問我的登錄模型,我的登錄模型是Login並擴展了Eloquent。 – Neo

+1

雄辯是絕對要走的路。它對所有操作都有相同的,簡單的合成器。大多數操作都相當流暢。 'User :: where_name('simon') - > order_by('last_name') - > get()'''''如何使用雄辯來檢索數據。唯一真正的區別是User ::',否則它看起來很相似,對吧? :)檢查文檔以獲取更多信息,這很容易學習。 – aebersold

0

好吧,沒關係,好​​像是「?」問號只是意味着流利沒有達到創建預備聲明的那一部分。我是Laravel和Fluent的新手,我認爲問號意味着錯誤在查詢的那一部分。

+0

那是對的,問號意味着參數丟失/錯誤。它解決了這個問題嗎? – aebersold