我正在学习如何运行原始SQL查询并坚持UPDATE操作。
我有INSERT的路线:
Route::get('/insert', function (){
DB::insert('insert into posts (title, content) values (?, ?)', ['PHP with Laravel', 'Just testing']);
return 'after insert';
});
SELECT的路线:
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 :(得分:0)
尝试使用where子句。 例如:
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
答案 1 :(得分:0)
我也测试了你的代码并且它有效 see this picture
答案 2 :(得分:0)
我在我的本地环境(laravel 5.2,mysql 5.1)上运行更新代码。它已更新好了。
你的日志怎么样?
答案 3 :(得分:0)
经过一些额外的研究后,我发现PostrgreSQL可能存储区分大小写的表和列的名称。对于这种情况,您需要在查询中用双引号命名。我认为当PostrgreSQL在查询中找到双引号时 - 它“认为”它是表/列名。但是没有这些名称的专栏。