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

69

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

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

Теги:
laravel-4

7 ответов

124
Лучший ответ

В 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();

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

  • 4
    Существует настоящая функция Schema :: rename ($ from, $ to), о которой упоминал Майк Брански. Используйте это, и это будет работать независимо от базы данных.
  • 0
    Почему это принятый ответ, когда он не использует надлежащий метод L4 Schema::rename($from, $to) , как я упоминал, @ trm42 и @Mike Branski? Пожалуйста, рассмотрите возможность его изменения, чтобы предоставить другим зрителям актуальный ответ.
Показать ещё 2 комментария
16

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

  • 4
    И в наши дни это документировано в Laravel 4 и Laravel 4.1 документации .
15

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

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

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

  • 0
    Это работает для меня, когда я хочу использовать DB::query("SET foreign_key_checks=0") ;
  • 1
    @swdev: PDO поддерживает запросы SET . Однако с DB::query ( PDO::query ) он создаст подготовленный оператор без необходимости, потому что вышеупомянутый запрос не имеет переменной.
10

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

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

  • 0
    Потрясающе, наконец-то решение, которое работает. Я должен был использовать это, потому что я делал DB::connection()->getPdo()->exec('USE '.$dbConfig['database']); , Я сбрасывал и воссоздавал БД в команде Laravel, и мне нужно было это сделать.
  • 1
    Спасибо за ваш ответ. Мы находим самый простой способ выполнить запрос raw create table
Показать ещё 2 комментария
7

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

1

Это мой упрощенный пример запуска 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

0

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
  • 0
    Добрый день, какой второй параметр в DB :: select (... Я не могу найти его в документации. Пожалуйста, помогите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню