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

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

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

Ответ 1

В Laravel 4 manual - он говорит о выполнении необработанных команд следующим образом:

DB::select(DB::raw('RENAME TABLE photos TO images'));

edit: Я только что нашел это в документации Laravel 4, которая, вероятно, лучше:

DB::statement('drop table users');

Обновление: В Laravel 4.1 (возможно, 4.0 - я не уверен) - вы также можете сделать это для необработанного запроса Where:

$users = User::whereRaw('age > ? and votes = 100', array(25))->get();

Дальнейшее обновление Если вы специально хотите переименовать таблицу - для этого есть команда схемы - см. ниже ответ Майка.

Ответ 2

На самом деле, Laravel 4 имеет функцию переименования таблицы в Illuminate/Database/Schema/Builder.php, она просто недокументирована на данный момент: Schema::rename($from, $to);.

Ответ 3

Вы также можете использовать DB::unprepared для ALTER TABLE запросов.

DB::unprepared предназначен для запросов типа CREATE TRIGGER. Но в основном он выполняет необработанные SQL-запросы напрямую. (без использования инструкций PDO prepared)

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

Ответ 4

Лучший способ сделать это я нашел до сих пор на боковом шаге Laravel и выполнить запрос напрямую с помощью объекта Pdo.

Пример

DB::connection()->getPdo()->exec( $sql );

Я обычно нахожу его более быстрым и эффективным для одноразового запроса, чтобы просто открыть инструмент запросов к базе данных и набрать запрос с полной проверкой синтаксиса, а затем выполнить его напрямую.

Это становится существенным, если вам нужно работать с хранимыми процедурами или использовать любые функции базы данных

Пример 2 настройка created_at на значение, которое вам нужно для этого, и боковое удержание любой углеродной funkiness

$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id);
DB::statement($sql);

Я нашел, что это сработало в контроллере, но не в миграции

Ответ 5

Принятый способ переименования таблицы в 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');

Примечание. Класс Laravel DB также поддерживает выполнение запросов SQL select, insert, update и delete, таких как:

$users = DB::select('select id, name from users');

Для получения дополнительной информации см. http://laravel.com/docs/4.2/database#running-queries.

Ответ 6

Это мой упрощенный пример запуска 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 script без возврата, используйте этот

DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');

Протестировано в laravel 5.1

Ответ 7

Laravel raw sql - Вставить запрос:

позволяет создать ссылку для вставки данных, доступных через URL-адрес. поэтому наше имя ссылки - "insertintodb", и внутри этой функции мы используем класс db. Класс db помогает нам взаимодействовать с базой данных. мы вставляем статическую функцию класса 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. мы читаем статическую функцию класса 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