Laravel 4: как запустить сырой SQL?
Я хочу переименовать таблицу в Laravel 4, но не знаю, как это сделать.
SQL – это alter table photos rename to images
. Если есть решение Eloquent, я также хотел бы знать, как запустить сырой SQL, потому что иногда нет альтернативы.
- Laravel orderBy по отношениям
- Как установить Laravel 4 в подпапку веб-хостинга без публичной публикации / приложения / папки?
- Laravel 4: Не удалось открыть stream: разрешение отклонено
- Яркая нетерпеливая загрузка
- Каковы лучшие практики и лучшие места для помощников laravel 4 или основных функций?
- Laravel. Используйте scope () в моделях с отношением
- Laravel - Route :: resource vs Route :: controller
- Ежедневный журнал Laravel, созданный с неправильными разрешениями
- Laravel перенаправляет обратно с помощью () сообщения
- Как использовать paginate () с предложением having (), когда столбец не существует в таблице
- Как удалить пакет из Laravel с помощью композитора?
- Как установить тайм-аут сеанса в Laravel 4.2?
- laravel throwing MethodNotAllowedHttpException
В руководстве Laravel 4 – это говорит о том, что вы выполняете необработанные команды:
DB::select(DB::raw('RENAME TABLE photos TO images'));
Я просто нашел это в документации Laravel 4, которая, вероятно, лучше:
DB::statement('drop table users');
Обновление: в Laravel 4.1 (возможно, 4.0 – я не уверен) – вы также можете сделать это для необработанного запроса Where:
$users = User::whereRaw('age > ? and votes = 100', array(25))->get();
Дальнейшее обновление Если вы специально хотите переименовать таблицу – для этого есть команда схемы – см. Ниже ответ Майка.
На самом деле, у Laravel 4 есть функция переименования таблицы в Illuminate / Database / Schema / Builder.php , она просто недокументирована на данный момент: Schema::rename($from, $to);
,
Вы также можете использовать DB::unprepared
для запросов ALTER TABLE
.
DB::unprepared
используется для запросов, таких как CREATE TRIGGER
. Но в основном он выполняет необработанные SQL-запросы напрямую. (без использования prepared
отчетов PDO)
Лучший способ сделать это я нашел до сих пор на боковом шаге Laravel и выполнить запрос напрямую, используя объект Pdo.
пример
DB::connection()->getPdo()->exec( $sql );
Я обычно нахожу его более быстрым и эффективным для одноразового запроса, чтобы просто открыть инструмент запросов к базе данных и ввести запрос с полной проверкой синтаксиса, а затем выполнить его напрямую.
Это становится существенным, если вам нужно работать с хранимыми процедурами или использовать любые функции базы данных
Пример 2: set created_at – это значение, которое вам нужно для этого, и боковое удержание любой углеродной забавы
$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id); DB::statement($sql);
Я обнаружил, что это работает в controllerе, но не в миграции
Принятым способом переименования таблицы в Laravel 4 является использование построителя схем. Таким образом, вы хотели бы сделать:
Schema::rename('photos', 'images');
С http://laravel.com/docs/4.2/schema#creating-and-dropping-tables
Если вы действительно хотите самостоятельно выписать исходный SQL-запрос, вы всегда можете:
DB::statement('alter table photos rename to images');
Примечание. Класс DB Laravel также поддерживает запуск необработанных запросов select
SQL, insert
, update
и delete
, например:
$users = DB::select('select id, name from users');
Для получения дополнительной информации см. http://laravel.com/docs/4.2/database#running-queries .
Это мой упрощенный пример запуска RAW SELECT, получения результата и доступа к значениям.
$res = DB::select(' select count(id) as c from prices p where p.type in (2,3) '); if ($res[0]->c > 10) { throw new Exception('WOW'); }
Если вы хотите запустить только SQL-скрипт без возврата, используйте это
DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');
Протестировано в laravel 5.1
Laravel raw sql – Вставить запрос:
позволяет создать ссылку для вставки данных, доступных через URL. поэтому наше имя ссылки – «insertintodb», и внутри этой функции мы используем class db. Класс db помогает нам взаимодействовать с базой данных. мы вставляем статическую функцию classа db. Внутри функции вставки мы напишем наш запрос PDO для вставки данных в базу данных. в следующем запросе мы вставим «мой заголовок» и «мой контент» в качестве данных в таблицу сообщений.
введите ниже код в свой файл web.php внутри каталога маршрутов:
Route::get('/insertintodb',function(){ DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']); });
Теперь выполните пожар над вставкой запроса из ссылки браузера ниже:
localhost/yourprojectname/insertintodb
Вы можете увидеть вывод вышеуказанного запроса на ввод, перейдя в таблицу базы данных. Вы найдете запись с идентификатором 1.
Laravel raw sql – Запрос на чтение:
Теперь давайте создадим ссылку get для чтения данных, доступную через url. поэтому наше имя ссылки «readfromdb». мы читаем статическую функцию classа db. Внутри функции чтения мы напишем наш запрос PDO для чтения данных из базы данных. в нижеприведенном запросе мы будем читать данные id ‘1’ из таблицы posts.
введите ниже код в свой файл web.php внутри каталога маршрутов:
Route::get('/readfromdb',function() { $result = DB::select('select * from posts where id = ?', [1]); var_dump($result); });
теперь стрелка выше прочитанного запроса из ссылки браузера ниже:
localhost/yourprojectname/readfromdb