#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 обнаружил двойные кавычки в запросе — он «думает», что это имя таблицы / столбца. Но нет столбца с таким именем.