Laravel 4: Как запустить необработанный SQL?


Я хочу переименовать таблицу в Laravel 4, но не знаю, как это сделать.

SQL - это alter table photos rename to images. Если есть красноречивое решение, я также хотел бы знать, как запустить необработанный SQL, потому что иногда просто нет альтернативы.

7 68

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-запросы напрямую. (без использования PDO prepared заявления)

https://github.com/laravel/framework/pull/54

лучший способ сделать это я нашел до сих пор это в сторону шаг 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