2016-10-15 37 views
0

我正在學習如何運行原始SQL查詢並停留在UPDATE操作。Laravel DB :: update不工作,什麼都不做,沒有任何錯誤

我有路線INSERT:

Route::get('/insert', function(){ 
    DB::insert('insert into posts (title, content) values (?, ?)', ['PHP with Laravel', 'Just testing']); 
    return 'after insert'; 
}); 

和路由的選擇:

Route::get('/read', function(){ 
    $results = DB::select('select * from posts'); 
    return var_dump($results); 
}); 

SELECT查詢之後,我看到:

/home/pavel/www_mysite/TestLaravel/routes/web.php:31: 
array (size=1) 
0 => 
    object(stdClass)[239] 
     public 'id' => int 11 
     public 'title' => string 'PHP with Laravel' (length=16) 
     public 'content' => string 'Just testing' (length=12) 
     public 'created_at' => null 
     public 'updated_at' => null 
     public 'is_admin' => int 0 

而且至少UPDATE查詢:

Route::get('/update', function(){ 
    DB::update('update posts set title = "Nothing here"'); 
}); 

之後,查詢新的SELECT查詢顯示相同的數據,並在PHPPgAdmin我沒有發現變化。我安裝了LaravelDebugBar,並可能在瀏覽器的底部看到INSERT和SELECT查詢的頁面,但在UPDATE查詢的頁面上看不到它。我不知道,錯誤在哪裏。

+0

我改變雙引號後使用如下這樣的單引號來得到它: 'Route :: get('/ update',function(){ DB :: update('update posts set title = \' \'); });' 但爲什麼查詢不使用雙引號? – brunen9

+0

我安裝了MySQL,並嘗試相同的查詢,他們只是工作。 INSERT到MySQL數據庫使用雙引號。 – brunen9

回答

0

經過一些額外的研究後,我發現PostrgreSQL可能會存儲表和列的區分大小寫的名稱。對於這種情況,您需要在查詢中使用雙引號將其名稱。我認爲當PostrgreSQL在查詢中發現雙引號時 - 它「認爲」它是表/列名。但是這些名字沒有列。

0

嘗試使用where子句。 例如:

$affected = DB::update('update users set votes = 100 where name = ?', ['John']); 
+0

但「哪裏」只會過濾記錄,而不是解決問題。請看我在問題本身的評論更新。你有什麼想法嗎? – brunen9

0

我在我的本地環境中運行你的更新代碼(laravel 5.2,MySQL 5.1中)。它已更新成功。

你的日誌如何?

相關問題