Laravel 4: Как запустить необработанный SQL?
Я хочу переименовать таблицу в Laravel 4, но не знаю, как это сделать.
SQL - это alter table photos rename to images
. Если есть красноречивое решение, я также хотел бы знать, как запустить необработанный SQL, потому что иногда просто нет альтернативы.
7 ответов:
на Laravel 4 руководство - Он говорит о выполнении необработанных команд следующим образом:
DB::select(DB::raw('RENAME TABLE photos TO images'));
edit: Я только что нашел это в Laravel 4 документация что лучше:
DB::statement('drop table users');
обновление: в Laravel 4.1 (возможно 4.0-я не уверен) - вы также можете сделать это для raw where query:
$users = User::whereRaw('age > ? and votes = 100', array(25))->get();
Обновить если вы специально хотите сделать переименование таблицы-есть команда схемы для этого-см. ответ Майка ниже для этого.
на самом деле, Laravel 4 имеет функцию переименования таблицы в Осветить / База Данных / Схема / Строитель.php, это просто недокументировано на данный момент:
Schema::rename($from, $to);
.
вы также можете использовать
DB::unprepared
наALTER TABLE
запросы.
DB::unprepared
предназначен для использования в запросах типаCREATE TRIGGER
. Но по существу он выполняет необработанные sql-запросы напрямую. (без использования PDOprepared
заявления)
лучший способ сделать это я нашел до сих пор это в сторону шаг Laravel и выполнить запрос непосредственно с помощью объекта Pdo.
пример
DB::connection()->getPdo()->exec( $sql );
обычно я нахожу его более быстрым и эффективным для однократного запроса, чтобы просто открыть мой инструмент запроса базы данных и ввести запрос с полной проверкой синтаксиса, а затем выполнить его напрямую.
это становится важным, если вам нужно работать с хранимыми процедурами или использовать любую базу данных функции
Пример 2 установка created_at на значение, которое вам нужно, чтобы это было, и боковое замачивание любой углеродной фанк
$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id); DB::statement($sql);
я обнаружил, что это работает в контроллере, но не в миграции
принятый способ переименования таблицы в 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 также поддерживает запуск raw SQL
select
,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-скрипт без возврата resutl используйте это
DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');
протестировано в laravel 5.1
Laravel raw sql – вставить запрос:
позволяет создать ссылку get для вставки данных, которые доступны через url . поэтому наше имя ссылки - "insertintodb", и внутри этой функции мы используем класс db . класс DB помогает нам взаимодействовать с базой данных . мы используем статическую функцию класса db insert . Внутри функции вставки мы напишем наш запрос PDO для вставки данных в базу данных . в приведенном ниже запросе мы вставим ‘ мой заголовок " и " мой контент’ в качестве данных в таблице сообщений .
поставить ниже код в ваш веб.php-файл внутри каталога маршруты :
Route::get('/insertintodb',function(){ DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']); });
теперь огонь выше вставить запрос из браузера ссылку ниже :
localhost/yourprojectname/insertintodb
вы можете увидеть вывод выше вставить запрос, перейдя в таблицу базы данных .вы найдете запись с id 1 .
Laravel raw sql-Read query:
теперь давайте создадим ссылку get для чтения данных ,которая доступна через url. поэтому наше имя ссылки - "readfromdb". мы чтение статической функции класса БД США . Внутри функции чтения мы напишем наш запрос PDO для чтения данных из базы данных . в приведенном ниже запросе мы будем читать данные id ' 1 ' из таблицы сообщений .
поставить ниже код в ваш веб.php-файл внутри каталога маршруты :
Route::get('/readfromdb',function() { $result = DB::select('select * from posts where id = ?', [1]); var_dump($result); });
теперь огонь выше читать запрос из браузера ссылка ниже:
localhost/yourprojectname/readfromdb