Laravel DB:: обновление не работает, вообще ничего не делает, без каких-либо ошибок

#sql #laravel

#sql #laravel

Вопрос:

Я учусь запускать необработанные SQL-запросы и застрял при операции ОБНОВЛЕНИЯ.

У меня есть маршрут для ВСТАВКИ:

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

После выбора запроса я вижу:

 /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
 

И, по крайней мере, запрос на ОБНОВЛЕНИЕ:

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

После этого запроса новый запрос SELECT показывает те же данные, и в phpPgAdmin я не обнаружил никаких изменений. Я установил LaravelDebugBar и могу видеть его внизу браузера на страницах для запросов INSERT и SELECT, но не вижу его на странице для запроса UPDATE. Я не могу понять, в чем ошибка.

Комментарии:

1. Я заставляю его работать после изменения двойных кавычек на экранированные одинарные кавычки следующим образом: Route::get('/update', function (){ DB::update('update posts set title = 'Nothing here''); }); Но почему запрос не работает с двойными кавычками?

2. Я установил MySQL и попробовал те же запросы, и они просто работают. ВСТАВКА в базу данных MySQL работает с двойными кавычками.

Ответ №1:

попробуйте использовать предложение where. пример :

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

Комментарии:

1. Но «where» будет просто фильтровать записи, а не устранять проблему. Пожалуйста, посмотрите на мое обновление в комментарии под самим вопросом. У вас есть какие-либо идеи по этому поводу?

Ответ №2:

Я тоже протестировал ваш код, и он работает, см. Эту картинку

Ответ №3:

Я запускаю ваш код обновления в своей локальной среде (laravel 5.2, mysql 5.1). Он обновлен нормально.

Как насчет вашего журнала?

Ответ №4:

После некоторых дополнительных исследований я обнаружил, что PostrgreSQL может хранить имена таблиц и столбцов с учетом регистра. В этом случае вам нужно взять их имена в двойные кавычки в вашем запросе. Я думаю, что когда PostrgreSQL обнаружил двойные кавычки в запросе — он «думает», что это имя таблицы / столбца. Но нет столбца с таким именем.