Laravel DB :: update不起作用,什么都不做,没有任何错误

时间:2016-10-15 10:41:02

标签: sql laravel

我正在学习如何运行原始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查询的页面上看不到它。我无法意识到,错误在哪里。

4 个答案:

答案 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在查询中找到双引号时 - 它“认为”它是表/列名。但是没有这些名称的专栏。